不等于两个通用列表

时间:2012-09-13 15:17:52

标签: c# linq

我有两个通用列表。它们主要有不同的领域,但共有4个领域。我想获取其中一个列表中的项目列表,而不是使用这四个字段作为“相等”的定义来获取另一个列表中的项目列表。

这是我尝试解决问题的方法。

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
    };

1 个答案:

答案 0 :(得分:1)

您可以使用Except查找设置差异。

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;