[英]How to use dynamic OrderBy variable with anonymous type?
我在主页上有几个网站并加载文章。 我可以在文章上设置排名以不同的顺序显示它们,但是文章的各个站点的排序可能不同。
我必须订购文章的代码为所有网站设置相同的顺序:
string officeLocation = "";
// office location could be either World, Europe, Africa, America, Asia, Pacific
var result = articles.Select(a => new
{
Title = a.Title,
Url = a[SPBuiltInFieldId.FileRef],
Byline = a[Constants.FieldNames.Byline],
ArticleDate = a[Constants.FieldNames.ArticleStartDate],
RankWorld = a[Constants.FieldNames.World],
RankEurope = a[Constants.FieldNames.RankEurope],
RankAfrica = a[Constants.FieldNames.RankAfrica],
RankAmerica = a[Constants.FieldNames.RankAmerica],
RankAsia = a[Constants.FieldNames.RankAsia],
RankPacific = a[Constants.FieldNames.RankPacific],
});
rptArticles.DataSource = result.OrderBy(a => a.RankWorld);
rptArticles.DataBind();
该代码将所有排名设置为RankWorld(1-6)。
如果字符串officeLocation
(即传递给方法)是欧洲,然后我想订购a.RankEurope
,如果办公室位置是亚洲秩序的a.RankAsia
等。
我怎样才能最好地实现这一目标(.NET 3.5)?
提前致谢。
假设您有一组固定的位置(根据定义,您必须拥有,因为您在匿名类型中说明它们),那么您可以使用一个开关:
string officeLocation = "";
// office location could be either World, Europe, Africa, America, Asia, Pacific
var result = articles.Select(a => new
{
Title = a.Title,
Url = a[SPBuiltInFieldId.FileRef],
Byline = a[Constants.FieldNames.Byline],
ArticleDate = a[Constants.FieldNames.ArticleStartDate],
RankWorld = a[Constants.FieldNames.World],
RankEurope = a[Constants.FieldNames.RankEurope],
RankAfrica = a[Constants.FieldNames.RankAfrica],
RankAmerica = a[Constants.FieldNames.RankAmerica],
RankAsia = a[Constants.FieldNames.RankAsia],
RankPacific = a[Constants.FieldNames.RankPacific],
});
switch (officeLocation)
{
case "World": result = result.OrderBy(a => a.RankWorld); break;
case "Europe": result = result.OrderBy(a => a.RankEurope); break;
case "Africa": result = result.OrderBy(a => a.RankAfrica); break;
case "America": result = result.OrderBy(a => a.RankAmerica); break;
case "Asia": result = result.OrderBy(a => a.RankAsia); break;
case "Pacific": result = result.OrderBy(a => a.RankPacific); break;
default: throw new Exception("Unexpected location: " + officeLocation);
}
rptArticles.DataSource = result.OrderBy(a => a.RankWorld);
rptArticles.DataBind();
显然,您需要决定如何最好地处理意外的位置。
请注意,理想情况下,我会将OrderBy
函数分配给Func<T,R>
,但只有一个OrderBy
调用,但由于匿名类型,您无法在此处执行此操作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.