2012-02-15 28 views
1

特定の条件を満たすデータテーブル行番号の配列を取得するにはどうすればよいですか?たとえば、 "DateTime"列のデータテーブルがあります。私は、 "DateTime"が変数startTimeに等しいデータテーブルの行番号を取得したいと思います。LINQを使用して特定の条件を満たすデータテーブル行番号を取得する

私は実際の行を取得する方法を知っていますが、データテーブル内の行の番号は取得しません。

すべてのヘルプは理解されるであろう:)

+1

http://stackoverflow.com/questions/1165028/how-do-i-add-row-number-to-a-linq-query-orentity –

+0

http://code.msdn.microsoftを参照してください。 .com/LINQ-to-DataSets-09787825を選択し、選択範囲までスクロールダウンしてください。 –

答えて

6

私は、インデックスための第2の入力は、あなたのために働くことができますSelectのオーバーロードを使用して、右の質問を読んでいた場合。その日は、第1〜第3、第6行に一致した場合

var indices = 
    table.AsEnumerable() 
     .Select((row, index) => new { row, index }) 
     .Where(item => item.row.Field<DateTime?>("DateTime") == startTime) 
     .Select(item => item.index) 
     .ToArray(); 

のようなものは、配列のインデックス0、2含まれています、と5.は、もちろん、クエリの場合には、各インデックスに1を追加することができます

+0

大変感謝しています! – user1035217

+0

Anthony、 'ToArray()'を使って 'var'の代わりに別の' DataTable'に結果を得ることは可能でしょうか?または 'var'を' DataTable'に変換/キャストするだけですか? 'ToDataTable()'があることを望みます) – bonCodigo

7
int count = tblData.AsEnumerable() 
    .Count(row => row.Field<DateTime>("DateTime").Equals(startTime)); 

またはクエリとして:

int count = (from row in tblData.AsEnumerable() 
      where row.Field<DateTime>("DateTime").Equals(startTime) 
      select row).Count(); 
+0

+1 'AsEnumerable()'が必要ですか?私は 'Count'がSQLでうまくいくと思うので、あなたはRDBMS層で仕事をしているLINQ2SQLに頼ることができます。 – dasblinkenlight

+0

@dasblinkenlight、彼はLinq-to-SQLを使用していることは明らかではありません。 OPがdatatableを言うとき、私は 'DataTable'型の実際のメモリ内オブジェクトを意味すると解釈します。もちろんこれは非常に間違っている可能性があります。 –

+0

@AnthonyPegramあなたが正しいです、私はlinq-2-sqlだと思っていました。 – dasblinkenlight

-1

これは不可能です:あなたは1(.Select(item => item.index + 1) EX)で開始する行番号をしたいと思います。 SQL(SQLを使用すると仮定します)では、返される行の順序は保証されません。あなたの行は主キーに従って物理的に順序付けられています。したがって、信頼できる行識別子が必要な場合は、主キー番号/ idを使用する必要があります。

関連する問題