2009-06-25 22 views
4

DataTableでAsEnumerable()を使用することはできませんが、私はC#3を使用していますが、2.0フレームワーク(LINQ機能はLINQBridgeの礼儀です)をターゲットにしています。 Select()を使用せずにDataTableを列挙できるようにする方法はありますか?DataTableを列挙できるようにするにはどうすればよいですか?

bool isExisting = (bdsAttachments.DataSource as DataTable).Select().Any(xxx => (string)dr["filename"] == filename); 

更新:

私はそれはそれはこのように見えるようにしたかった:

bool isExisting = (bdsAttachments.DataSource as DataTable).AsEnumerable().Any(xxx => (string)dr["filename"] == filename); 

私は私が考えている、のDataTableのSelectメソッドは、コピーを返すことを暗示を取得していますAsEnumerableだけを使用するには、問題は2.0フレームワークをターゲットにしています。System.Data.DataSetExtensionsは利用できません。

私はこれを試しました:http://cs.rthand.com/blogs/blog_with_righthand/archive/2006/01/15/284.aspx、しかしcompilaエラー。

答えて

11
public static IEnumerable<DataRow> EnumerateRows(this DataTable table) 
    { 
     foreach (var row in table.Rows) 
     { 
      yield return row; 
     } 
    } 

あなたが呼び出すことができます:

bool isExisting = (bdsAttachments.DataSource as DataTable).EnumerateRows().Any(dr => (string)dr["filename"] == filename); 
+0

あなたの答えは私にIEnumerableのディッパを掘るよう強要します^ _ ^私はそれを見つけました、私はこれを見つけましたhttp://www.developerfusion.com/article/9397/iterator-blocks-in-c-2-autogenerated-state-machines/本当に啓発する – Hao

1

あなたはIEnumerableをとしてのDataTableをキャストしようとすると、セットを反復処理することができます。

//your data exists as a DataTable 
DataTable dt = (DataTable)bdsAttachments.DataSource; 
foreach (DataRow row in dt) 
{ 
    if (row["filename"] == filename) 
     return row; 
} 

ファイル名のリストと検索を反復処理しますforeachの(私はあなたがそれで最初のDataRowを探していると仮定filename、ファイル名と一致するすべての行ではありません)。

+0

IListSource.GetList()は、LINQの任意の拡張メソッドにマップされません。 LINQのメソッドは列挙型でしか利用できません – Hao

+0

私はそのアイデアがLINQを使用しないと考えました(したがって、.NET Framework 2.0の要件)。 –

2

厳密2.0あなたの列挙子を維持:

public static IEnumerable<DataRow> getRows(DataTable table) 
{ 
    foreach (DataRow row in table.Rows) 
    { 
     yield return row; 
    } 
} 

を次に、このようなlinqbridgeを呼び出す:

bool isExisting = getRows(bdsAttachments.DataSource as DataTable).Any(row => (string)row["filename"] == filename); 
+0

Selectは.Rowsでは使用できません。2.0フレームワークまたは3.5フレームワークからです – Hao

+0

ええ、あなたは編集の間に私を捕まえました。 –

4
  1. IEnumerable<DataRow> rows = dataTable.AsEnumerable();(System.Data.DataSetExtensions.dll)
  2. IEnumerable<DataRow> rows = dataTable.Rows.OfType<DataRow>();(System.Core.dll)
関連する問題