【问题标题】:C# Compare two strongly typed listC#比较两个强类型列表
【发布时间】:2021-02-19 23:56:12
【问题描述】:

我有强烈的数据列表,我想找出数据的差异。我使用了 EXCEPT,但我得到了我只希望收到的所有结果

expectedEmailValidationDtoList.Add(new EmailValidationDto { EmailAddress = "testemail889@hotmail.com", IsEmailValid = false, ValidityChecked = true });

我想达到以下几点;

1- 如果两个列表数据相等或不相等? 2- 记录的差异

电子邮件类

public class EmailValidationDto
{   
    public string EmailAddress { get; set; }
    public bool IsEmailValid { get; set; }
    public bool ValidityChecked { get; set; }
}

列表

var expectedEmailValidationDtoList = new List<EmailValidationDto>();

        expectedEmailValidationDtoList.Add(new EmailValidationDto { EmailAddress = "Myemail@hotmail.com", IsEmailValid = true, ValidityChecked = true });
        expectedEmailValidationDtoList.Add(new EmailValidationDto { EmailAddress = "TestEmail009@hotmail.com", IsEmailValid = true, ValidityChecked = true });
        expectedEmailValidationDtoList.Add(new EmailValidationDto { EmailAddress = "devOps@hotmail.com", IsEmailValid = true, ValidityChecked = true });
        expectedEmailValidationDtoList.Add(new EmailValidationDto { EmailAddress = "testemail", IsEmailValid = false, ValidityChecked = true });
        expectedEmailValidationDtoList.Add(new EmailValidationDto { EmailAddress = "testemail2@hotmail", IsEmailValid = false, ValidityChecked = true });
        expectedEmailValidationDtoList.Add(new EmailValidationDto { EmailAddress = "testemail3.com", IsEmailValid = false, ValidityChecked = true });
        expectedEmailValidationDtoList.Add(new EmailValidationDto { EmailAddress = "ccccc.com", IsEmailValid = false, ValidityChecked = true });
        expectedEmailValidationDtoList.Add(new EmailValidationDto { EmailAddress = "testemail889@hotmail.com", IsEmailValid = false, ValidityChecked = true });

        var expectedEmailValidationDtoList2 = new List<EmailValidationDto>();

        expectedEmailValidationDtoList2.Add(new EmailValidationDto { EmailAddress = "khurram@hotmail.com", IsEmailValid = true, ValidityChecked = true });
        expectedEmailValidationDtoList2.Add(new EmailValidationDto { EmailAddress = "TestEmail009@hotmail.com", IsEmailValid = true, ValidityChecked = true });
        expectedEmailValidationDtoList2.Add(new EmailValidationDto { EmailAddress = "devOps@hotmail.com", IsEmailValid = true, ValidityChecked = true });
        expectedEmailValidationDtoList2.Add(new EmailValidationDto { EmailAddress = "testemail", IsEmailValid = false, ValidityChecked = true });
        expectedEmailValidationDtoList2.Add(new EmailValidationDto { EmailAddress = "testemail2@hotmail", IsEmailValid = false, ValidityChecked = true });
        expectedEmailValidationDtoList2.Add(new EmailValidationDto { EmailAddress = "testemail3.com", IsEmailValid = false, ValidityChecked = true });
        expectedEmailValidationDtoList2.Add(new EmailValidationDto { EmailAddress = "ccccc.com", IsEmailValid = false, ValidityChecked = true });


  var d1 = expectedEmailValidationDtoList.Except(expectedEmailValidationDtoList2).ToList();
  var d2 = expectedEmailValidationDtoList2.Except(expectedEmailValidationDtoList).ToList();

【问题讨论】:

标签: c# linq .net-core icollection


【解决方案1】:

您可以使用下面的 Where() 和 Any() 来比较两个列表:

    var d1 = expectedEmailValidationDtoList1
        .Where(email1 => !expectedEmailValidationDtoList2
            .Any(email2 => email1.EmailAddress
                .Equals(email2.EmailAddress, StringComparison.InvariantCultureIgnoreCase)));
    var d2 = expectedEmailValidationDtoList2
        .Where(email1 => !expectedEmailValidationDtoList1
            .Any(email2 => email1.EmailAddress
                .Equals(email2.EmailAddress, StringComparison.InvariantCultureIgnoreCase)));

或者使用 All()

    var d21 = expectedEmailValidationDtoList1
        .Where(email1 => expectedEmailValidationDtoList2
            .All(email2 => !email1.EmailAddress
                .Equals(email2.EmailAddress, StringComparison.InvariantCultureIgnoreCase)));
    var d22 = expectedEmailValidationDtoList2
        .Where(email1 => expectedEmailValidationDtoList1
            .All(email2 => !email1.EmailAddress
                .Equals(email2.EmailAddress, StringComparison.InvariantCultureIgnoreCase)));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-12
    • 1970-01-01
    • 1970-01-01
    • 2011-03-03
    • 1970-01-01
    相关资源
    最近更新 更多