如何使DataTable可枚举?

我不能在DataTable上使用AsEnumerable(),我使用的是C#3,但我只是针对2.0框架(LINQfunction是由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 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); 
  1. IEnumerable rows = dataTable.AsEnumerable(); (System.Data.DataSetExtensions.dll)
  2. IEnumerable rows = dataTable.Rows.OfType(); (System.Core.dll)

严格保持你的普查员2.0:

 public static IEnumerable 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,而不是所有与文件名匹配的行)。