LINQ查询的多个条件

时间:2016-06-04 04:45:50

标签: c# linq sql-server-2014

我正在尝试创建一个LINQ查询,该查询将使用来自两个不同列的条件过滤掉数据。

我只是在Time_Data_1列符合特定字符串值时尝试从Section_Data列的两个日期之间获取数据, 即 当2016/5/152016/6/16SelectedOption = Something之间 这就是我所拥有的,这是行不通的。

 DataGridOne.DataContext = sql.Time_TBLs.Where(item =>
                item.Time_Data_1 < new DateTime(DateTime.Now.Year, DateTime.Now.Month - 1, 15) &&
                item.Time_Data_1 > new DateTime(DateTime.Now.Year, DateTime.Now.Month, 16) &&
                item.Section_Data == SelectedOption);

此查询适用于在两个日期之间获取数据的单一条件。但它会在这些日期之间获取所有数据。

Column1.DataContext = sql.Time_TBLs.Where(item =>
                    item.Time_Data_1 < new DateTime(DateTime.Now.Year, DateTime.Now.Month - 1, 15) &&
                    item.Time_Data_1 > new DateTime(DateTime.Now.Year, DateTime.Now.Month, 16)

如何为查询添加第二个条件?

编辑:错字,应该和&amp;&amp;当我把&amp;

2 个答案:

答案 0 :(得分:1)

您遇到的任何特定错误/问题?

就代码而言,我想说的可能是BODMAS和bitwise&amp;运营商。 阅读更多关于&amp;上 Usage & versus &&

同时这段代码适合你吗?

DataGridOne.DataContext = sql.Time_TBLs.Where(item =>
(item.Time_Data_1 < new DateTime(DateTime.Now.Year, DateTime.Now.Month - 1, 15) &&
item.Time_Data_1 > new DateTime(DateTime.Now.Year, DateTime.Now.Month, 16)) &&
item.Section_Data == SelectedOption);

PS:使用纯日期时,我发现日期更容易做到17而不是16。由于所有时间都默认为00:00:0000,因此如果您有16/06/2016 07:05:0000这样的数据,则不会从检查DateTime.Day为16的查询中取回它。

答案 1 :(得分:1)

条件声明是错误的。 您希望在两个日期之间进行过滤,即在2016/05/152016/06/16之间进行过滤,但您的条件表明您希望小于2016/05/15且大于2016/06/16

您的代码应该是这样的。

DataGridOne.DataContext = sql.Time_TBLs.Where(item =>
item.Time_Data_1 > new DateTime(DateTime.Now.Year, DateTime.Now.Month - 1, 15)
&& item.Time_Data_1 < new DateTime(DateTime.Now.Year, DateTime.Now.Month, 16) 
&& item.Section_Data == SelectedOption);