避免 switch case -linq [重复]
Posted
技术标签:
【中文标题】避免 switch case -linq [重复]【英文标题】:Avoid switch case -linq [duplicate] 【发布时间】:2012-05-22 12:28:43 【问题描述】:可能重复:Dynamic LINQ OrderBy
switch (sort)
case "Title":
queryResults = queryResults.OrderBy(r => r.Title);
break;
default:
queryResults = queryResults.OrderBy(r => r.LastName);
break;
有什么办法可以摆脱上面的开关块吗?
我可以做一些类似的事情吗:
queryResults = queryResults.OrderBy(r => r."sort");
or
queryResults = queryResults.OrderBy(r => r.sort);
【问题讨论】:
你会在这个问题中找到答案:***.com/questions/41244/dynamic-linq-orderby 提供的解决方案不适用于大多数 linq 提供商,请参阅我的解决方案:***.com/a/21936366/775114 【参考方案1】:如果您想完全动态地执行此操作,可以使用一些反射(简单示例):
string prop = "Title";
var q = queryResults.OrderBy(x => x.GetType().GetProperty(prop).GetValue(x, null));
无论如何,我都不会认为这是最好的解决方案。这对您是否真的有意义取决于您从哪里获得属性名称(如果您也从反射中获得它)以及有多少属性。
【讨论】:
【参考方案2】:应该这样做
queryResults = queryResults.OrderBy(r => sort == "Title" ? r.Title : r.LastName)
【讨论】:
【参考方案3】:您可以使用DynamcLinq。我已经一年多没有碰它了,但我得到了预期的结果。您的代码将更改为:
queryResults = queryResults.OrderBy(sort);
哦,酷,这也是NuGet package too
【讨论】:
以上是关于避免 switch case -linq [重复]的主要内容,如果未能解决你的问题,请参考以下文章
使用 Case/Switch 和 GetType 来确定对象 [重复]