LINQ查询Datatable以检查记录是否存在



我想对一个名为Records的数据表执行LINQ查询,并检查是否存在记录。如果它存在,我想找出它所在的行。我该怎么做?

在添加system.linq命名空间后,我想在我的数据表上做一个.where,但这个方法似乎不存在。请告知

第页。S:Am在与2010 的比较中使用c#

DataTable不是默认使用Enumerable。你必须转换成

  var result = from p in dataTable.AsEnumerable()
     where p.Field("ID") == 2
    select p.Field("Name");
   if(result.Any())
   {
      //do your work
    }

阅读的这篇文章

http://blogs.msdn.com/b/adonet/archive/2007/01/26/querying-datasets-introduction-to-linq-to-dataset.aspx

了解如何使用Field<T>

由于DataRowCollection未实现IEnumerable<T>,因此无法使用该方法。您需要使用AsEnumerable()扩展名:

var dataRowQuery= myDataTable.AsEnumerable().Where(row => ...

您可能还需要一个System.Data.DataSetExtensions的项目参考,这样才能工作。

祝你好运!

如果您有一个表,例如:

DataTable dt = new DataTable();
dt.Columns.Add("rownum", typeof(Int32));
dt.Columns.Add("val", typeof(String));
dt.Rows.Add(1, "a");
dt.Rows.Add(2, "b");
dt.Rows.Add(3, "c");

然后,

Console.WriteLine(
                dt.Rows.IndexOf(dt.AsEnumerable().Where(c => c.Field<String>(1) == "d").FirstOrDefault())); // `1:= index of column

将导致CCD_ 6,因为未找到CCD_。但是,

Console.WriteLine(
                dt.Rows.IndexOf(dt.AsEnumerable().Where(c => c.Field<String>(1) == "b").FirstOrDefault())); // `1:= index of column

将产生1,表示"b"所在的行。

相关内容

  • 没有找到相关文章

最新更新