我想提取一個OrderBy子句,這可能嗎?如何提取訂單子句,以便我可以使用邏輯來設置它?
所以我可以這樣做:
OrderBy ob = null;
if(....)
ob = x.Id
else
ob = x.Name
var result = source.OrderBy(ob);
這可能嗎?
我想提取一個OrderBy子句,這可能嗎?如何提取訂單子句,以便我可以使用邏輯來設置它?
所以我可以這樣做:
OrderBy ob = null;
if(....)
ob = x.Id
else
ob = x.Name
var result = source.OrderBy(ob);
這可能嗎?
你可以嘗試這樣的事:
IQueryable<Foo> result = source ...
if(....)
result = result.OrderBy(x => x.Id);
else
result = result.OrderBy(x => x.Name);
你可以做一些事情,就幾乎完全映射到你在做什麼,但更容易的選擇是保持查詢的軌道,而不是方法順序:
IQueryable<Whatever> query = someQuery;
if(something)
query = query.OrderBy(item => item.Id);
else
query = query.OrderBy(item => item.Name);
但是,如果你真的想:
Expression<Func<Whatever, object>> selector = null;
if(something)
selector = item => item.Id;
else
selector = item => item.Name;
var results = query.OrderBy(selector);
值得指出的是,第二個選項只適用於Linq-to-Objects。 –
@ p.s.w.g您只需將其更改爲「Expression
我認爲,但仍然可能需要確保每個表達式都具有相同的類型。我不認爲'Expression
爲什麼不只是做你的合作nditional邏輯並根據條件執行單獨的OrderBy()?
Ex。
if(foo == true)
{
result = result.OrderBy(r => r.Id);
}
else
{
result = result.OrderBy(r => r.Name);
}
我猜這取決於你爲什麼要這樣做。 @ p.s.w.g答案描述了最實際的情況。 –