3

我有 2 个 Lists 返回相同的 Item 。 <foo>orderType一个列表为 0,第二个列表为 1 在第一个列表中我进行过滤,我必须将第二个列表中的项目添加到受分页限制的结果中。基本上这是我的最终查询:

var listFoo= QueryList1.Concat(QueryList2);  //(IQueriable)
List<foo> listFoo =listFoo.OrderByDescending(r => r.ID)
                          .ThenBy(d =>d.orderType)
                          .Skip((currentPageIndex - 1) * pageSize)
                          .Take(pageSize)
                          .ToList();

这很好用,因为列表 1 用作主要项目,列表 2 用作第一个列表的详细信息。此外,我的过滤器应该只适用于第一个列表。但是问题来了。如何按日期订购第二个列表。我需要列出按日期排序的详细信息。基本上我需要类似的东西:

List<foo> listFoo =listFoo.OrderByDescending(r => r.ID)
                          .ThenBy(d =>d.orderType)
                          .ThenBy(x=>(x.ordertype==1)?x.Date)
                          .Skip((currentPageIndex - 1) * pageSize)
                          .Take(pageSize)
                          .ToList();

编辑 :

List 1 : 
id =1,ordertype=0,Date = new DateTime(1950,1,4),  [0]
id =2,ordertype=0,Date = new DateTime(1950,2,1)   [1]
List 2 :
id =1,ordertype=1,Date = new DateTime(1950,1,5),  [2]
id =1,ordertype=1,Date = new DateTime(1950,1,2),  [3]
id =1,ordertype=1,Date = new DateTime(1950,1,3),  [4]
id =1,ordertype=1,Date = new DateTime(1950,1,4)   [5]

This should be ordered as follows : 
[0],[3],[4],[5],[2],[1]
4

1 回答 1

7

看起来您缺少三元运算符的最后一部分:

listFoo = listFoo.OrderByDescending(r => r.ID)
                           .ThenBy(d =>d.orderType)
                           .ThenBy(x => (x.ordertype==1) ? x.Date : DateTime.MinValue)
                           .Skip((currentPageIndex - 1) * pageSize)
                           .Take(pageSize)
                           .ToList();

如果您不关心订单 ifordertype不是 1 ,那么else条件是任意的。

于 2013-03-04T14:00:21.863 回答