2016-10-04 7 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

のようにそれを行うだろうか?私は何かが間違っているかもしれませんが、SQLコマンドの間にサブクエリの使用を除いて大きな違いはありません。 –

+0

私はクエリを持っていませんが、それを保存しないでください。 "[テーブル] .ID desc" - >なしの行 しかし、 "desc to asc - >あるレコードを変更してください。 私と私の同僚は説明しません。いつも行がある –

答えて

0

まあ、それはです:

あなたはIQueryable<T>を持っています。

あなたは/テイクで注文してみてください。しかしOrderBy/OrderByDescending復帰IOrderedQueryable<T>、あなたはあなたのIQueryable<T>に結果を割り当てます。

IOrderedQueryable<T>IQueryable<T>から継承されても、予期しない結果につながる可能性があります。

あなたは `(悲しげに自明ではない)right`を働いていないものを説明してもらえます私はその

//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(); 
関連する問題