Linq检查datarow是否存在于数据表中

时间:2011-11-14 08:49:02

标签: c# linq

我的查询如下

  DataRow dr = objDtModifier.Rows[num];
  var existingRows = resultDataTable.AsEnumerable().Where(row => row == dr);

但是existingRows.Count总是让我归零。

谁能说出这里的错误。

4 个答案:

答案 0 :(得分:4)

您正在将objDtModifier源colloction中的行对象与resultDataTable集合中的一组不同的行对象进行比较,这些行对象将总是返回一个空结果集,因为它们是一组不同的对象引用(无论它们是否包含是否相同的数据) 有可以测试的房产吗?例如:

var existingRows = resultDataTable.AsEnumerable().Where(row => row.Id == dr.Id);

答案 1 :(得分:1)

将从名为objDtModifier的表中获取的行对象与名为resultDataTable的表中的行进行比较。所以,除非这是一个错字,否则这可能是错误的。

编辑:即使它们包含来自同一数据库表的行,您也要比较两个不同行对象的对象引用 - 这将失败。您需要比较两列唯一标识行(或可能是一组列)的列。

答案 2 :(得分:1)

这是因为row和dr不是同一个对象而你要比较两个对象, 尝试检查行的列,例如主键值

答案 3 :(得分:0)

无论他们是否是同一类型。如果objDtModifier和resultDataTable不包含相同的实例,那么您获得的行为是正确的。

row == dr使用引用相等,如chris所述。如果objDtModifier和resultDataTable包含不同的行实例但引用相同的数据,那么如果id是数据的主键,则可能需要使用row.id == dr.id。