简体   繁体   English

如何编写具有多个值的LINQ查询?

[英]how to write LINQ Query having multiple values from one Column?

I need to find data from data table with multiple values from one column only. 我需要从数据表中查找仅包含一列的多个值的数据。

Below is an example: 以下是一个例子:

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

Here ColumnName is my Datatable's column name and "test1, test2" are different values ( number of values are dynamic and have "," as delimiter ). 这里ColumnName是我的数据表的列名,“test1,test2”是不同的值(值的数量是动态的,并且具有“,”作为分隔符)。

I want to make this Linq query which returns all records from datatable which have values equal to " test1 " and " test2 ". 我想使这个Linq查询返回数据表中所有记录,其值等于“ test1 ”和“ test2 ”。

Edit : Above LINQ Query returns result like below SQL Query. 编辑:上面的LINQ Query返回如下SQL Query的结果。 Select * from Table where ColumnName in ('test1','test2')

Use Split + Join : 使用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

For the sake of completeness, the less efficient but more natural approach using Contains : 为了完整起见,使用Contains 效率较低但更自然的方法:

var matchingRows = from row in datatable.AsEnumerable()
                   where values.Contains(row.Field<string>(ColumnName))
                   select row;

Build a list : 建立一个清单:

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

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

This will be translate to what you want 这将转化为您想要的

Select * 
from Table 
where ColumnName in ('test1','test2')

Try this : 尝试这个 :

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();

try this: 尝试这个:

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

The clean and easy way would be so use Select . 干净简单的方法就是使用Select

Example: 例:

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 is now: rows现在是:

在此输入图像描述

You can you or statement ' || 你可以或声明'|| '

 var Value = (from r in datatable.AsEnumerable()
                             where r.Field<string>(ColumnName).Contains(value1) || r.Field<string>(ColumnNamedatatable).Contains(value2)
                             select r).ToList();
datatable.where(r=>{"test1","test2"}.Contains(r.ColumnName))

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM