比较两个列表的属性

时间:2013-05-07 20:32:29

标签: c# linq

我有一个包含内容对象的列表(List<Content>)。在Content对象中,我有4个字段。

ContentID
ModifiedDate
Description
HtmlMarkup

我有两个List<Content>我需要通过ContentID(两个不同的数据库)进行比较,看看是否有任何字段有不同的值,然后我需要得到哪些字段不同。

所以我想说我有对象A

ContentID    - 1
ModifiedDate - 1/1/2013
Description  - "This is my first content class"
HtmlMarkup   - "<b>First Content</b>

和对象B

ContentID    - 1  -- these are from two different databases, so contentID will match
ModifiedDate - 1/1/2013
Description  - "This is a description"
HtmlMarkup   - "<b>Test</b>

我应该通过ContentID比较它们。在这个例子中,我将返回说明和HtmlMarkup对于ContentID 1是不同的。如果ContentID不匹配(意味着它已被删除或不在第二个数据库中),我也想抓住它。我该怎么做?

1 个答案:

答案 0 :(得分:2)

不是最优雅的解决方案,但这样的事情应该有效。可以修改选择以返回您需要的任何数据。

var result = from contentA in contentObjectA
             join contentB in contentObjectB on contentA.Id equals contentB.Id into contentBB
             from contentB in contentBB.DefaultIfEmpty(null)
             select new {
                ContentAId = contentA.Id
                //Check if Id exists
                ExistsInB = contentB == null ? false : true,
                ModifiedDateDiff = contentB.ModifiedDate == null ? true : contentA.ModifiedDate == contentB.ModifiedDate,
                DescriptionDiff = contentB.Description == null ? true : contentA.Description == contentB.Description,
                HtmlMarkupDiff = contentB.HtmlMarkup == null ? true : contentA.HtmlMarkup == contentB.HtmlMarkup
             };