根据条件使用Linq搜索日期中的月份或年份

时间:2015-12-30 15:05:42

标签: c# .net linq datatable where-clause

我想首先解释一下我的情况:

我有一个DataTable,显示在DataGridView中。我还有一个Textbox来搜索特定列中的值。对于日期值,这看起来像这样(searchInDt是我的DataTable,getSelectedItem是列名,searchBox是TextBox)

searchInDt.CaseSensitive = false;
var rowSources = (from myRow in searchInDt
                                .AsEnumerable()
                                .Where(myRow => myRow.Field<DateTime>(getSelectedItem)
                                                    .ToString()
                                                    .StartsWith(searchBox.Text))
                  select myRow);

if (rowSources.Any())
    dataGridView1.DataSource = rowSources.CopyToDataTable();

所以这有效但现在我有一个CheckBox,我可以在月份和年份之间进行选择。如果我想从DateTime值(月份)或位置6(年份)的位置3进行搜索,该怎么办? 我试过Skip,但这不起作用。即使尝试EndsWith(这不是我正在寻找的那个)也行不通。

1 个答案:

答案 0 :(得分:3)

您可以直接查看string字段的DateTime / Month属性,而不是检查Year的{​​{1}}值。

根据CheckBox选择设置DateTime的值,然后

isMonth

在旁注中,您应该使用var isMonth = <true if Month is selected, false if Yaer is selected>; var query = int.Parse(searchBox.Text); var rowSources = searchInDt.AsEnumerable() .Where(row => isMonth ? row.Field<DateTime>(getSelectedItem).Month == query : row.Field<DateTime>(getSelectedItem).Year == query); ,因为通常RadioButton用于选择多个值,并且您不希望用户同时选择月份和年份。