比较两个列表中的元素,并返回不同

时间:2016-09-08 14:51:58

标签: c# linq

我有一个包含以下字段的课程。

    class StandardizedModel
    {
        public string Case{ get; set; }
        public DateTime? CreatedDateLocal { get; set; }
        public DateTime? ClosedDateLocal { get; set; }
        private string _status;
    }

假设我使用此自定义类创建了两个列表。

List1(主要清单)

列表2

我要做的是比较两个列表中的元素,如果它们不同,我需要从list1返回原始的StandardsModel。

这两个列表的大小始终相同,并且案例将始终存在于两个列表中,但日期和状态可能会有所不同。

我尝试使用linq的zip来尝试比较元素,然后将它们添加到列表中但返回0。

List<StandardizedModel> testList = new List<StandardizedModel>();

            var test = List1.Zip(List2, (a, b) =>
            {
                if (a =! b) { testList.Add(a);}
                return testList;
            });

2 个答案:

答案 0 :(得分:3)

您可以Enumerable.Join使用var changes = from m1 in list1 join m2 in list2 on m1.Case equals m2.Case where m1.CreatedDateLocal != m2.CreatedDateLocal || m1.ClosedDateLocal != m2.ClosedDateLocal || m1._status != m2._status select m1; List<StandardizedModel> changeList = changes.ToList();

function AddDecimalToAmounts()
{
    var ApproxAmount = $("#ApproximateValue_TextBox").val();
    var ApproxAmountVis = $('#chqAdditional_div').is(':visible');
    var UncryAmount = $("#UncryAmount_TextBox").val();
    var UncryAmountVis = $('#chqAdditional_div').is(':visible');

    if (ApproxAmountVis == true && UncryAmountVis== true)
    {
        if (//Code for if both amount fields are displayed and to add '.00' or not)
        {

        }
    }
    else if (ApproxAmountVis == false && UncryAmountVis== true)
    {
        if (//Code for if only the UncryAmount amount field is displayed and to add '.00' or not)
        {

        }
    }
    else if (ApproxAmountVis == true && UncryAmountVis== false)
    {
        if (//Code for if only the ApproxAmountVis amount field is displayed and to add '.00' or not)
        {

        }
    }
}

答案 1 :(得分:-1)

您的最佳选择对于代码可重用性是覆盖对象的相等实现,以便您可以根据需要确定它们是否相等,如果您尝试在默认情况下,对象是引用,意味着它们指向相同的内存位置。如果它们是2个独立的实例,那将永远不会是这种情况。 (这就是你的拉链不起作用的原因)然后你可以用你的拉链来创建你的列表。