C# 不等于两个通用列表
我有两个通用列表。他们有很多不同的领域,但有四个领域是共同的。我想使用这四个字段作为“相等”的定义,得到其中一个列表中的项目列表,而不是另一个列表中的项目列表 这是我解决问题的尝试C# 不等于两个通用列表,c#,linq,C#,Linq,我有两个通用列表。他们有很多不同的领域,但有四个领域是共同的。我想使用这四个字段作为“相等”的定义,得到其中一个列表中的项目列表,而不是另一个列表中的项目列表 这是我解决问题的尝试 var unMatchedData = from liveLines in liveList join oldList in comapreSnapshotList on new {liveLines.ClientNo, liveLines.SequenceNo, liveLines.LineNo,
var unMatchedData = from liveLines in liveList
join oldList in comapreSnapshotList
on new {liveLines.ClientNo, liveLines.SequenceNo, liveLines.LineNo, liveLines.Text} equals
new {oldList.ClientNo, oldList.SequenceNo, oldList.LineNo, oldList.Text}
select new KNOWTXTS
{
ClientNo = liveLines.ClientNo,
SequenceNo = liveLines.SequenceNo,
LineNo = liveLines.LineNo,
Text = liveLines.Text
};
您可以使用查找集合差异
var newElements = liveList.Select(l => new {
l.ClientNo, l.SequenceNo, l.LineNo, l.Text
});
var oldElements = comapreSnapshotList.Select(l => new {
l.ClientNo, l.SequenceNo, l.LineNo, l.Text
});
var newElementsInNew = newElements.Except(oldElements);
var deletedFromNew = oldElements.Except(newElements);
// if you need the original object in the list
var newElements = from obj in liveList
join newEle in newElementsInNew
on new {obj.ClientNo, obj.SequenceNo, obj.LineNo, obj.Text} equals newEle
select obj;
var deletedElements = from obj in comapreSnapshotList
join deletedEle in deletedFromNew
on new {obj.ClientNo, obj.SequenceNo, obj.LineNo, obj.Text} equals deletedEle
select obj;
可能重复:另一个可能的重复:“查找两个列表中不匹配的项目”是否要查找在
liveList
中但不在comapreSnapshotList
中的项目,反之亦然?@DavidJohnson一点也不清楚。有人问你想要几个选项中的哪一个,然后你说“是”(不是一个“是/否”问题),然后是一个完全模糊的陈述。@DavidJohnson:也许我理解错了,但你想找到两个列表中不在其中一个列表中的所有项目?这不是一个矛盾吗?看看提议副本中的答案。如果您需要实际的项目,而不是用于比较的匿名类型,那么它们会更好。