Linq用于检查数据流是否存在于数据表中
本文关键字:数据表 存在 是否 用于 检查 数据流 Linq | 更新日期: 2023-09-27 18:14:35
我的查询如下
DataRow dr = objDtModifier.Rows[num];
var existingRows = resultDataTable.AsEnumerable().Where(row => row == dr);
但是existingRows.Count
总是返回0。
谁能告诉我这里出了什么问题
您正在比较来自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