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:也许我理解错了,但你想找到两个列表中不在其中一个列表中的所有项目?这不是一个矛盾吗?看看提议副本中的答案。如果您需要实际的项目,而不是用于比较的匿名类型,那么它们会更好。