簡體   English   中英

LINQ查詢數據表以檢查記錄是否存在

[英]LINQ Query on Datatable to check if record exists

我想對名為Records的數據表執行LINQ查詢,並檢查是否存在記錄。 如果它存在,我想找出它所在的行。我怎么能這樣做呢?

我想在添加system.linq命名空間后在我的數據表上做一個.where但該方法似乎不存在。 請指教

PS:我在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

會導致-1因為找不到"d" 但,

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

將得到1 ,表示"b"所在的行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM