C# LINQ查询Datatable以检查记录是否存在
我想对名为Records的数据表执行LINQ查询,并检查记录是否存在。如果它存在,我想找出它所在的行。我该怎么做呢 在添加system.linq命名空间后,我想在我的datatable上执行.where操作,但该方法似乎不存在。请告知C# LINQ查询Datatable以检查记录是否存在,c#,linq,C#,Linq,我想对名为Records的数据表执行LINQ查询,并检查记录是否存在。如果它存在,我想找出它所在的行。我该怎么做呢 在添加system.linq命名空间后,我想在我的datatable上执行.where操作,但该方法似乎不存在。请告知 注意:我在vs 2010中使用c#您不能使用该方法,因为DataRowCollection没有实现IEnumerable。您需要使用AsEnumerable()扩展名: var dataRowQuery= myDataTable.AsEnumerable().Wh
注意:我在vs 2010中使用c#您不能使用该方法,因为
DataRowCollection
没有实现IEnumerable
。您需要使用AsEnumerable()
扩展名:
var dataRowQuery= myDataTable.AsEnumerable().Where(row => ...
您可能还需要一个对System.Data.DataSetExtensions
的项目引用,以使其正常工作
祝你好运 DataTable不是默认的可枚举数据表。你必须转换成
var result = from p in dataTable.AsEnumerable()
where p.Field("ID") == 2
select p.Field("Name");
if(result.Any())
{
//do your work
}
请阅读本文以了解更多信息
了解如何使用
字段
如果您有以下表格:
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");
那么
将产生
1
,表示“b”
所在的行 您可以使用检查记录是否存在。@paradox p是dataTable.AsEnumerable()的对象
Console.WriteLine(
dt.Rows.IndexOf(dt.AsEnumerable().Where(c => c.Field<String>(1) == "d").FirstOrDefault())); // `1:= index of column
Console.WriteLine(
dt.Rows.IndexOf(dt.AsEnumerable().Where(c => c.Field<String>(1) == "b").FirstOrDefault())); // `1:= index of column