2015-02-23 48 views
0

我有以下代码:LINQ/LAMBDA .OrderBy(日期类型).ThenBy(枚举类型)

transactionBindingSource.DataSource = context.Transactions 
       .Where(t => t.Date >= BeginningDate && 
         t.Date <= EndDate) 
       .OrderBy(t => t.Date) 
       .ThenBy(t => t.TransactionType) 
       .ToList(); 

这是一个交易清单。我想按日期先订购交易,然后按类型订购。该类型是我创建的枚举。枚举可以通过存款或提款。

枚举代码:

enum CashFlowTransactionType 
{ 
    Deposit = 10, 
    Withdrawal = 20 
} 

当我从日期,然后交易类型此列表它的订单我的DataGrid,但存款之前提出退学。我需要存款才能在提款前发帖。我认为它会通过枚举值对它进行排序,这就是为什么我进行了存款10和取消20.这似乎并不是这种情况。

在此先感谢。

+5

请显示一个简短但完整的程序来演示问题。我预计这会很好。 (这在数据库中看起来像什么?你的表中有相同的枚举值吗?日志是什么样的?) – 2015-02-23 20:56:26

+3

Date是'DateTime'字段吗?是否存在影响结果的时间组件? – 2015-02-23 21:06:02

+0

该值在数据库中显示为整数。当我使用OrderBy(t => t.TransactionType)时,它按预期工作。 ThenBy()有不同的限制吗? – Safari137 2015-02-23 21:16:36

回答

1

这是通过移除日期属性的时间部分解决。

0

定义你的枚举为:

public enum CashFlowTransactionType : int 
{ 
    Deposit = 10, 
    Withdrawal = 20 
} 

然后调用它为:

transactionBindingSource.DataSource = context.Transactions 
      .Where(t => t.Date >= BeginningDate && t.Date <= EndDate) 
      .OrderBy(t => t.Date) 
      .ThenBy(t => (int)t.TransactionType) 
      .ToList(); 
+5

这里':int'不是必需的 - 这是默认的基础类型。 – 2015-02-23 21:00:16

+1

是的,只是一种习惯。 – user3021830 2015-02-23 21:00:33

+5

这不会改变任何事情。比较枚举时,底层的整数值就是比较的东西。提取基础数值不会改变这一点。 – Servy 2015-02-23 21:03:32