我需要从数据表中查找只有一列的多个值的数据。
以下是一个例子:
var Value = (from r in datatable.AsEnumerable()
where r.Field<string>(ColumnName).Contains("test1,test2")
select r ).ToList();
这里ColumnName是我的数据表的列名和&#34; test1,test2&#34;是不同的值(值的数量是动态的,并且&#34;,&#34;作为分隔符)。
我想创建这个Linq查询,该查询返回数据表中所有记录,这些记录的值等于&#34; test1
&#34;和&#34; test2
&#34;。
编辑:
上面的LINQ Query返回如下SQL Query的结果。
Select * from Table where ColumnName in ('test1','test2')
答案 0 :(得分:3)
使用Split
+ Join
:
IEnumerable<string> values = "test1,test2".Split(',');
var matchingRows = from row in datatable.AsEnumerable()
join value in values
on row.Field<string>(ColumnName) equals value
select row;
DataTable tblResult = matchingRows.CopyToDataTable(); // or ToList
为了完整起见,使用Contains
的{{3}}但更自然的方法:
var matchingRows = from row in datatable.AsEnumerable()
where values.Contains(row.Field<string>(ColumnName))
select row;
答案 1 :(得分:1)
建立一个清单:
var filters = new [] {"test1", "test2"};
var Value = (from r in datatable.AsEnumerable()
where filters.Contains(r.Field<string>(ColumnName))
select r ).ToList();
这将转换为您想要的内容
Select *
from Table
where ColumnName in ('test1','test2')
答案 2 :(得分:0)
试试这个:
var searchParameters = new []{ "test1", "test2" }; // or "test1,test2".Split(",")
var Value = (from r in datatable.AsEnumerable()
where searchParameters.All(s => r.Field<string>(ColumnName).Contains(s))
select r).ToList();
答案 3 :(得分:0)
试试这个:
var Value = (from r in datatable.AsEnumerable()
where r.Field<string>(ColumnName).Contains("test1").Contains("test2")
select r ).ToList();
答案 4 :(得分:0)
干净简便的方法就是使用Select
。
示例:强>
var dt = new DataTable();
dt.Columns.Add("col1", typeof(string));
dt.Rows.Add(new object[] {"test1"});
dt.Rows.Add(new object[] {"test2"});
dt.Rows.Add(new object[] {"test3"});
dt.Rows.Add(new object[] {"test4"});
// Select * from Table where ColumnName in ('test1','test2')
var rows = dt.Select("col1 in ('test1','test2')");
rows
现在是:
答案 5 :(得分:0)
你可以或声明'|| '
var Value = (from r in datatable.AsEnumerable()
where r.Field<string>(ColumnName).Contains(value1) || r.Field<string>(ColumnNamedatatable).Contains(value2)
select r).ToList();
答案 6 :(得分:0)
datatable.where(r=>{"test1","test2"}.Contains(r.ColumnName))