Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何编写一列中有多个值的LINQ查询?_C#_Linq - Fatal编程技术网

C# 如何编写一列中有多个值的LINQ查询?

C# 如何编写一列中有多个值的LINQ查询?,c#,linq,C#,Linq,我只需要从数据表中找到一列中有多个值的数据 以下是一个例子: var Value = (from r in datatable.AsEnumerable() where r.Field<string>(ColumnName).Contains("test1,test2") select r ).ToList(); var Value=(来自datatable.AsEnumerable()中的r) 其中r.Field(Column

我只需要从数据表中找到一列中有多个值的数据

以下是一个例子:

 var Value = (from r in datatable.AsEnumerable()
             where r.Field<string>(ColumnName).Contains("test1,test2")
             select r ).ToList();
var Value=(来自datatable.AsEnumerable()中的r)
其中r.Field(ColumnName).Contains(“test1,test2”)
选择r.ToList();
这里ColumnName是我的Datatable的列名,“test1,test2”是不同的值(值的数量是动态的,并且以“,”作为分隔符)

我想进行这个Linq查询,它返回datatable中的所有记录,这些记录的值等于“
test1
”和“
test2

编辑: 上面的LINQ查询返回的结果与下面的SQL查询类似。
从ColumnName所在的表中选择*('test1','test2')
尝试以下操作:

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();
var searchParameters=new[]{“test1”、“test2”};//或“test1,test2”。拆分(“,”)
var Value=(来自datatable.AsEnumerable()中的r)
其中searchParameters.All(s=>r.Field(ColumnName).Contains(s))
选择r.ToList();
试试这个:

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();
var searchParameters=new[]{“test1”、“test2”};//或“test1,test2”。拆分(“,”)
var Value=(来自datatable.AsEnumerable()中的r)
其中searchParameters.All(s=>r.Field(ColumnName).Contains(s))
选择r.ToList();
建立一个列表:

var filters = new [] {"test1", "test2"};

var Value = (from r in datatable.AsEnumerable()
             where filters.Contains(r.Field<string>(ColumnName))
             select r ).ToList();
建立一个列表:

var filters = new [] {"test1", "test2"};

var Value = (from r in datatable.AsEnumerable()
             where filters.Contains(r.Field<string>(ColumnName))
             select r ).ToList();

使用
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

使用
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
试试这个:

var Value = (from r in datatable.AsEnumerable()
                 where r.Field<string>(ColumnName).Contains("test1").Contains("test2")
                 select r ).ToList();
var Value=(来自datatable.AsEnumerable()中的r)
其中r.Field(ColumnName).Contains(“test1”).Contains(“test2”)
选择r.ToList();
试试这个:

var Value = (from r in datatable.AsEnumerable()
                 where r.Field<string>(ColumnName).Contains("test1").Contains("test2")
                 select r ).ToList();
var Value=(来自datatable.AsEnumerable()中的r)
其中r.Field(ColumnName).Contains(“test1”).Contains(“test2”)
选择r.ToList();

干净、简单的方法就是这样使用

示例:

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')");
现在是:


清洁和简单的方法就是如此使用

示例:

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')");
现在是:


你可以用你的语言或语句“| |”

 var Value = (from r in datatable.AsEnumerable()
                             where r.Field<string>(ColumnName).Contains(value1) || r.Field<string>(ColumnNamedatatable).Contains(value2)
                             select r).ToList();
var Value=(来自datatable.AsEnumerable()中的r)
其中r.Field(ColumnName).Contains(value1)| | r.Field(ColumnNamedatatable).Contains(value2)
选择r.ToList();

你可以使用你的语言或语句“||”

 var Value = (from r in datatable.AsEnumerable()
                             where r.Field<string>(ColumnName).Contains(value1) || r.Field<string>(ColumnNamedatatable).Contains(value2)
                             select r).ToList();
var Value=(来自datatable.AsEnumerable()中的r)
其中r.Field(ColumnName).Contains(value1)| | r.Field(ColumnNamedatatable).Contains(value2)
选择r.ToList();

为什么在这里使用Linq?对于这样一个简单的任务来说,完全是矫枉过正。为什么要在这里使用Linq呢?对于这样一个简单的任务来说,这完全是多余的。这听起来可能会导致大量开销,而且速度非常慢。这听起来可能会导致大量开销,而且速度非常慢。