3

基本的に、アイデアは、あるDataTableのデータを別のDataTableと照合することです。最初のDTでは、配列を作成する1つの行に20の異なる列があり、それぞれ2列の数千の行を持つ別のDTがあります。配列内の20の異なる変数すべての中で見つかった2番目のDTのすべての行を選択する必要があります(したがって、最初のテーブルで行ごとに移動します)。

これを1つのクエリで実行できますか?

for (int x = 0; x < 20; x++) //this fills up the array from the 20 columns of dt1
{
   numbers[x] = Convert.ToInt16(dt1.Rows[i]["n" + (x+1)]);
}
var filtered = dt2.Select("Col1 = " + (any of the numbers[]) + " AND Col2 = " + (any of the numbers[]));

したがって、明らかに問題の行は最後の行です。それが可能かどうかはわかりません。

私はここが初めてで、C#も初めてです。ご協力ありがとうございました。

4

3 に答える 3

2

データ テーブルを列挙型に変換し、LINQ でデータをフィルター処理できます。

このようなもの:

var filtered = dt2.AsEnumerable().Where(m => numbers.Contains(m.Col1) && numbers.Contains(m.Col2));

于 2013-02-13T08:49:53.860 に答える
1

上記のアプローチはどちらもうまく機能します。ただし、DataSet が厳密に型指定されているかどうかを知らなくても (そして、dt1 を配列に射影する必要はなく、単一のクエリを使用して):

var filtered = dt2.AsEnumerable().Where(row => dt1.Rows[0].ItemArray.Contains(row[0]) ||
                                               dt1.Rows[0].ItemArray.Contains(row[1]));
于 2013-02-13T09:05:11.150 に答える
1

この SQL を以下で使用できますDataTable

var numbersAsString = numbers.Select(x => x.ToString()).Aggregate((x,y) => x + "," + y);
var filtered = dt2.Select("Col1 in (" + numbersAsString  + ") AND Col2 in (" + numbersAsString  + ")");

最初に、Array「1,3,4,5」のような文字列を作成し、Col1 または Col2 の値が配列内にあるかどうかを SQL でチェックします。

于 2013-02-13T08:51:29.253 に答える