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

本文关键字:数据表 存在 是否 用于 检查 数据流 Linq | 更新日期: 2023-09-27 18:14:35

我的查询如下

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

但是existingRows.Count总是返回0。

谁能告诉我这里出了什么问题

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

您正在比较来自objDtModifier源集合的行对象与resultDataTable集合中的一组不同的行对象,该集合将始终返回空结果集,因为它们是一组不同的对象引用(这无论它们是否包含相同的数据)。
有没有一个属性可以用来测试?如:

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

这是因为row和dr不是同一个对象而你要比较的是两个对象,检查行中的列,比如primary keyvalue

比较从表objDtModifier中获得的行对象和表resultDataTable中的行对象。所以,除非这是一个打字错误,否则这可能就是问题所在。

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

无论它们是否是同一类型。如果objDtModifier和resultDataTable不包含相同的实例,你得到的行为是正确的。

row==dr通过引用使用相等性,就像Chris所说的那样。如果objDtModifier和resultDataTable包含不同的行实例,但引用相同的数据,您可能需要使用row.id==dr。如果Id是数据表的主键,则为Id