我有一个要使用Linq OrderByDescending排序的项目列表。 排序作为值传递给switch语句。
items.OrderByDescending((SomeObject)i => {
switch(cond)
{
case "conditionA":
return (float)i.MemberA;
case "conditionB":
return (long)i.MemberB;
case "conditionC":
return (int)i.MemberB;
}})
我担心的是此循环的性能。 有没有一种方法可以预定义返回值并将其一次传递到循环中?
答案 0 :(得分:5)
您可以将开关移到OrderByDescending
方法之外。只需将lambda定义为Func<SomeObject, float>
并在linq查询之前分配它即可:
Func<SomeObject, float> orderBy = null;
switch (cond)
{
case "conditionA":
orderBy = i => (float)i.MemberA;
break;
case "conditionB":
orderBy = i => (float)i.MemberB;
break;
default:
orderBy = i => (int)i.MemberC;
break;
}
现在您可以在排序中使用该lambda了
var res = items.OrderByDescending(orderBy);
如果items
是IQueriable
,则可以将Func<...>
更改为Expression<Func<...>>