我正在尝试创建一个LINQ查询,该查询将使用来自两个不同列的条件过滤掉数据。
我只是在Time_Data_1
列符合特定字符串值时尝试从Section_Data
列的两个日期之间获取数据,
即
当2016/5/15
时2016/6/16
与SelectedOption = 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;
答案 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/15
和2016/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);