我有一个对象列表,在这种情况下是税表。 List<TaxForm>();
现在,这些表单的一部分应该具有与某些属性相同的信息。他们都来自同一个客户。我如何查看列表中的所有纳税表格,并检查是否有任何让我们说财产&#34; RecordB&#34;是不同的。如果是这样,我需要标出差异。我无法想出使用lambda表达式做到这一点的方法。因此,例如,每个TaxForm上的所有BRecords应该具有相同的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);
我为任何错别字道歉。比现在病了,加药,在家工作...... Blah。
根据芦苇的答案,我认为这最适合我的解决方案和场景。这样做不会很好:
这是我最后做的事情,感谢Reed的回答。这是一个稍微不同的场景,但我最终使用了类似的概念来满足我当前逻辑的需求。
forms.TrueForAll(t => forms[0].ARecord.PayerName == t.ARecord.PayerName);
实际上可见的问题描述:
注意*只有少数属性需要在所有形式中相同。不是所有物业。如果属性D,E,F属于什么,属性,属性或者PROERTYC存在冲突,请检查列表。所以,由于他们的支付名称应该始终相同,因此将形式的旗帜作为冲突。他们来自同一家公司。
表
ID:1099R
PayerName:一些信用社
SubmitDate:01/12/2015
形成
编号:1098
PayerName:一些Credit UnionForm
SubmitDate:01/20/2015
形成
ID:1099INT
PayerName:不同的名称,因此标志数据
SubmitDate:01/5/2015
答案 0 :(得分:3)
您可以使用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);