C# 如何使用LAMBDA处理三个应该相同的列表的属性差异

C# 如何使用LAMBDA处理三个应该相同的列表的属性差异,c#,.net,lambda,C#,.net,Lambda,我有一个对象列表,在这种情况下是税务表格列表()现在,这些表单的某些部分应该与某些属性具有相同的信息。他们都来自同一个客户。我如何才能查看列表中的所有纳税表,并检查是否有任何财产“记录B”不同。如果是这样,我需要标记差异。我想不出一种使用lambda表达式的方法。例如,每个分类表上的所有单词对PayerName应该具有相同的值 var hasConflict = taxForms.Where(tf => tf.PayerName != priorTaxForm).Count > 0;

我有一个对象列表,在这种情况下是税务表格<代码>列表()现在,这些表单的某些部分应该与某些属性具有相同的信息。他们都来自同一个客户。我如何才能查看列表中的所有纳税表,并检查是否有任何财产“记录B”不同。如果是这样,我需要标记差异。我想不出一种使用lambda表达式的方法。例如,每个分类表上的所有单词对PayerName应该具有相同的值

var hasConflict = taxForms.Where(tf => tf.PayerName != priorTaxForm).Count > 0;
如果可能的话,我正在想一个这样的方法。如果没有,我想我可以迭代列表并将当前表单与之前的表单进行比较,如果不同,则存在差异。只是看起来很糟糕。提前谢谢

我试图以更稳定的方式完成的一个例子如下:

var forms = jobObject.TaxForms;
string payerName = forms[0].ARecord.PayerName;
bool hasConflict = !forms.TrueForAll(tf => tf.ARecord.PayerName == payerName);
我为任何打字错误道歉。现在病得比狗还重,还在家里吃药。。。废话


根据里德的回答,我认为这最适合我的解决方案和场景。这不是很好吗

感谢里德的回答,以下是我最后所做的。这是一个稍微不同的场景,但我最终使用了类似的概念来满足我当前逻辑的需要

forms.TrueForAll(t => forms[0].ARecord.PayerName == t.ARecord.PayerName);
问题的实际可见描述:

注*所有形式中只有少数属性需要相同。不是所有的财产。所以,当属性D、E、F不重要时,若属性YA、属性YB或属性PROERTYC发生冲突,请检入列表。因此,下列表单将标记为冲突,因为它们的付款人名称应始终相同。他们来自同一家公司

形式 识别号:1099R 付款人姓名:一些信用合作社 提交日期:2015年12月1日 形式 身份证号码:1098 PayerName:一些信用合作社表格 提交日期:2015年1月20日 表格
ID:1099INT PayerName:不同的名称,因此标记数据
提交日期:2015年5月1日

您可以使用
Enumerable.Zip
将列表合并在一起

var conflicts = taxForm1.Zip(taxForm2, (one, two) => new {One = one, Two = two})
                        .Zip(taxForm3, (ot, three) => new {ot.One, ot.Two, Three = three})
                        .Where(f => f.One.PayerName != f.Two.PayerName || f.One.PayerName != f.Three.PayerName);

var hasConflicts =   (taxForm1.Count != taxForm2.Count) 
                  || (taxForm1.Count != taxForm3.Count)
                  || conflicts.Any();

根据评论进行编辑:

如果只是检查以验证列表中的所有项目是否相同,则可以执行以下操作:

// Note- requires at least one item in the list.  Add checks if needed.
var hasConflicts = taxForm.Skip(1).Any(t => t.PayerName != taxForm[0].PayerName);

迭代列表并没有什么坏处。有时LINQ会使一个简单的循环变得过于复杂。最好是列出哪些对象与判断为基值的对象不匹配。在这种情况下,所有与表单[0]不匹配的表单。看,我需要标记它们。现在,我将运行它,如果它被标记为存在冲突,那么我将迭代每个表单,并在表单值不同的地方以红色突出显示。如果能够使用该表达式,并将不匹配的表达式提取到新列表中,则会更好、更简洁。仅供参考,这仅在
.NET 4.0
以后的版本中提供。它们不是多个列表,而是单个列表。列表中每个分类单元的所有记录应具有相同的值。例如,同一纳税年度。@Casey在您的问题中不清楚-只是编辑以包含该选项。啊。我是个白痴。这正是我想要的。谢谢是的,那是我的错。我倾向于快速地解释它,在这样做的时候,忽略了重要的细节。哈哈,再次谢谢你。