2016-10-04 46 views
-2

這是我的代碼:C#可查詢訂購,採取並在不工作的權利

IQueryable<ICB_TRANSACTION> Query = DbContext.Set<ICB_TRANSACTION>(); 

if (_input.i_Type != -99) // -99 = All type 
{ 
    Query = Query.Where(x => x.TYPE == _input.i_Type); 
} 
if (_input.i_Member_ID != null && _input.i_Member_ID > 0) 
{ 
    Query = Query.Where(x => x.CREATE_BY_ID == _input.i_Member_ID); 
} 
if (_input.b_OderByDesc) 
    Query = Query.OrderByDescending(x => x.ID); 
else 
    Query = Query.OrderBy(x => x.ID); 

if (_input.i_Top > 0) 
{ 
    Query = Query.Take(_input.i_Top); 
} 

return Query.ToList(); 

這就是結果:

Result

,但我想是這樣的: Want to like this

我該怎麼做?請幫幫我!

+3

你能解釋一下什麼是'不工作right'(這是可悲的不言自明的)?我可能會錯過一些東西,但在sql命令之間沒有看到任何重大區別 - 除了使用子查詢之外。 –

+0

我有查詢我不保存,但當使用 「order by [table] .ID desc」 - > no row but change「desc asc - > some record。 我和我的同事不能解釋。總是有行 –

回答

0

好吧,如果我看到一些奇怪的事情在你的代碼,這就是:

您有一個IQueryable<T>

您嘗試通過/送訂購:但OrderBy/OrderByDescending返回IOrderedQueryable<T>和分配結果您IQueryable<T>

即使IOrderedQueryable<T>繼承自IQueryable<T>,我猜這可能會導致意想不到的結果。

我會那樣做

//filteredQuery is an IQueryable<ICB_TRANSACTION> 
var filteredQuery = DbContext.Set<ICB_TRANSACTION>(); 

if (_input.i_Type != -99) // -99 = All type 
    filteredQuery = filteredQuery.Where(x => x.TYPE == _input.i_Type); 

if (_input.i_Member_ID != null && _input.i_Member_ID > 0) 
    filteredQuery = filteredQuery.Where(x => x.CREATE_BY_ID == _input.i_Member_ID); 

//now we have done the filters, let's do the order by/take part. 
//sortedQuery is an IOrderedQueryable<ICB_TRANSACTION> 
var sortedQuery = _input.b_OderByDesc 
    ? filteredQuery.OrderByDescending(x => x.ID) 
    : filteredQuery.OrderBy(x => x.ID); 

if (_input.i_Top > 0) 
    sortedQuery = sortedQueryable .Take(_input.i_Top); 

return sortedQuery.ToList();