[英]How to extract an order by clause so I can use logic to set it?
I want to extract out an OrderBy clause, is this possible? 我想提取一个OrderBy子句,这可能吗?
So I can do something like: 所以我可以这样做:
OrderBy ob = null;
if(....)
ob = x.Id
else
ob = x.Name
var result = source.OrderBy(ob);
Is this possible? 这可能吗?
You could do something that would map almost exactly to what you're doing, but the easier option is to keep track of the query, not the method to order on: 您可以执行几乎完全映射到您正在执行的操作的操作,但更简单的选项是跟踪查询,而不是订购方法:
IQueryable<Whatever> query = someQuery;
if(something)
query = query.OrderBy(item => item.Id);
else
query = query.OrderBy(item => item.Name);
However, if you really want to: 但是,如果你真的想:
Expression<Func<Whatever, object>> selector = null;
if(something)
selector = item => item.Id;
else
selector = item => item.Name;
var results = query.OrderBy(selector);
You could try something like this: 你可以尝试这样的事情:
IQueryable<Foo> result = source ...
if(....)
result = result.OrderBy(x => x.Id);
else
result = result.OrderBy(x => x.Name);
Why not just do your conditional logic and do the separate OrderBy() based on the conditon? 为什么不单独执行条件逻辑并根据条件执行单独的OrderBy()?
Ex. 防爆。
if(foo == true)
{
result = result.OrderBy(r => r.Id);
}
else
{
result = result.OrderBy(r => r.Name);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.