DataTableを列挙可能にするにはどうすればよいですか?
-
22-07-2019 - |
質問
DataTableでAsEnumerable()を使用できません。C#3を使用していますが、2.0フレームワークをターゲットにしているだけです(LINQ機能は LINQBridge )。 Select()を使用せずに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 ですが、コンパイルエラーがあります。
解決
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);
他のヒント
-
IEnumerable<DataRow> rows = dataTable.AsEnumerable();
(System.Data.DataSetExtensions.dll) -
IEnumerable<DataRow> rows = dataTable.Rows.OfType<DataRow>();
(System.Core.dll)
列挙子を厳密に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);
DataTableをIEnumerableとしてキャストして、セットを反復処理できます。
//your data exists as a DataTable
DataTable dt = (DataTable)bdsAttachments.DataSource;
foreach (DataRow row in dt)
{
if (row["filename"] == filename)
return row;
}
foreachはリストとファイル名の検索を繰り返します(ファイル名に一致するすべての行ではなく、そのファイル名で最初のDataRowを検索していると仮定します)。
所属していません StackOverflow