1

1 つの列のみから複数の値を持つデータ テーブルからデータを検索する必要があります。

以下に例を示します。

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

ここで、ColumnName はデータテーブルの列名で、「test1、test2」は異なる値です (値の数は動的で、区切り文字として「,」があります)。

test1" " と " "に等しい値を持つデータテーブルからすべてのレコードを返すこの Linq クエリを作成したいと考えていますtest2

編集:上記のLINQクエリは、以下のSQLクエリのような結果を返します。 Select * from Table where ColumnName in ('test1','test2')

4

7 に答える 7

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:

var matchingRows = from row in datatable.AsEnumerable()
                   where values.Contains(row.Field<string>(ColumnName))
                   select row;
于 2013-11-05T08:47:40.217 に答える
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')
于 2013-11-05T08:47:35.360 に答える
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();
于 2013-11-05T08:47:28.547 に答える
0

これを試して:

var Value = (from r in datatable.AsEnumerable()
                 where r.Field<string>(ColumnName).Contains("test1").Contains("test2")
                 select r ).ToList();
于 2013-11-05T08:47:45.023 に答える
0

クリーンで簡単な方法は so useSelectです。

例:

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今でしょ:

ここに画像の説明を入力

于 2013-11-05T08:48:14.917 に答える
0
datatable.where(r=>{"test1","test2"}.Contains(r.ColumnName))
于 2013-11-05T09:09:23.220 に答える
0

またはステートメント ' || を使用できます。'

 var Value = (from r in datatable.AsEnumerable()
                             where r.Field<string>(ColumnName).Contains(value1) || r.Field<string>(ColumnNamedatatable).Contains(value2)
                             select r).ToList();
于 2013-11-05T08:54:19.110 に答える