2016-10-04 48 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();