如何使用 LAMBDA 列出应该相同的三个列表的属性差异
本文关键字:三个 列表 属性 LAMBDA 何使用 | 更新日期: 2023-09-27 18:19:19
我有一个对象列表,在本例中是税表。 List<TaxForm>();
现在,这些窗体的某些部分应具有与某些属性相同的信息。它们都来自同一个客户。我如何查看列表中的所有税表并检查是否有任何假设属性"RecordB"不同。如果是这样,我需要标记差异。 我想不出使用 lambda 表达式执行此操作的方法。例如,每个税表上的所有 BRecords 都应该具有相同的付款人名称值。
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);
实际可见的问题描述:
注意*在所有窗体中,只有少数属性需要相同。并非所有属性。因此,如果属性 A、属性 B 或 PROERTYC 在属性 D、E、F 无关紧要时发生冲突,请检查列表。因此,下面的表格将标记为冲突,因为它们的付款人名称应始终相同。他们来自同一家公司。
形式 房源ID:1099R 付款人名称:某信用社 提交日期: 01/12/2015形式 编号:1098 付款人姓名:某信用社表格 提交日期: 01/20/2015形式
ID:1099INT 付款人名称:不同的名称,因此标记数据 提交日期: 01/5/2015
您可以使用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);