我想在另一個表中的一些值爲了我的主表(合同)失敗後(通過加入),然後再次減少合同和排序它(ThenBy)。ThenBy在合同價值選擇
這裏是我的問題的短版:
是否有可能降低複合匿名類型(由加入生產)的定義類型不把我IOrderedQueryable到一個IQueryable?
與示例中的問題的長版:
我的生產代碼是非常複雜,但對於這個問題,我已經打破下來到一個簡單的例子的目的:
static void simple()
{
bool condition = true;
var ctx = new LxDataContext();
IQueryable<Contract> q1 = ctx.Contracts.Join(ctx.ContractDetails, c => c.ContractId, cd => cd.ContractId, (c, cd) => new { c, cd }).
Where(J => J.cd.DetailNo > 0).
Select(J => J.c);
IOrderedQueryable<Contract> qOrdered;
if (condition)
{
qOrdered = (IOrderedQueryable<Contract>)q1.Join(ctx.ContractPartners, c => c.ContractId, cp => cp.ContractId, (c, cp) => new { c, cp }).
Join(ctx.VwPartners, J => J.cp.PartnerId, p => p.PartnerId, (J, p) => new { J.c, p }).
OrderBy(J => J.p.LastName).
Select(J => J.c);
}
else
qOrdered = q1.OrderBy(c => c.Premium);
IOrderedQueryable<Contract> qReady = (qOrdered).ThenBy(c => c.ContractId); //if condition == true exception here
var dump = qReady.Skip(50).Take(50).ToList();
}
當條件是假的,一切都可以作爲例外。 然而,當更復雜的排序依據()執行ThenBy()失敗與此異常:
Expression of type 'System.Linq.IQueryable`1[InfoServiceTests.DB.Contract]' cannot be used for parameter of type 'System.Linq.IOrderedQueryable`1[InfoServiceTests.DB.Contract]' of method 'System.Linq.IOrderedQueryable`1[InfoServiceTests.DB.Contract] ThenBy[Contract,Int32](System.Linq.IOrderedQueryable`1[InfoServiceTests.DB.Contract], System.Linq.Expressions.Expression`1[System.Func`2[InfoServiceTests.DB.Contract,System.Int32]])'
所以,即使我將它轉換爲IOrderedQueryable <> qOrdered似乎並沒有被IOrderedQueryable <>和ThenBy( )失敗。是否有可能通過另一個表中的某些東西進行排序,然後將結果減少到Contract並ThenBy-對它重新排序?
一些評論:
- 如果這是給您的任何幫助:在我的生產代碼,我有一個通用的排序類大多來自this answer拍攝。
- 是的,我知道的例子很容易被固定,但在我的生產代碼,我需要通過用戶定義的值排序一個通用的解決方案。這將循環並將Queryable傳遞給函數。
訂購我想過這個問題,但'的OrderBy(J =>的Jc)'不作爲的Jc工作是指縮合至極是一個沒有比較器的類。而使用另一個OrderBy將否定以前的所有。 – void
@NULL我以你的方式訂購。 –
你解決了我的例子的問題,不幸的是在我的真實代碼中,我必須通過我的半完成查詢來進一步實現排序/過濾,與另一個表連接,爲分頁準備數據等。 – void