使用linq迭代对象的最佳方法是什么?
本文关键字:方法 是什么 最佳 linq 迭代 对象 使用 | 更新日期: 2023-09-27 18:06:01
var AddQuery = from newdist in newSpec.Distributions
where !( from oldDist in oSpec.Distributions
select oldDist.Id).Contains( newdist.Id )
select newdist;
foreach (var dist in AddQuery)
{
dist.operation="Add";
}
var updateQuery = from oldDistributionForUpdate in ospec.Distributions
where (from newDistributionForUpdate in newspec.Distributions
select newDistributionForUpdate.DistributionId).Contains(oldDistributionForUpdate.DistributionId)
&&
(from newDistributionForUpdate in newpaymentSpecification.Distributions
select newDistributionForUpdate.Amount).Equals(oldDistributionForUpdate.Amount)
select oldDistributionForUpdate;
foreach (var dist in updateDistQuery)
{
dist.operation = "Update";
}
我计划从两个查询结果&有没有一种更简单的方法来实现我正在做的事情?
在您的原始代码片段中,您在Id
上匹配AddQuery
,在DistributionId
上匹配UpdateQuery
。如果这是一个错字,并且在两种情况下都应该是Id
或DistributionId
,那么您可以在同一个循环中更有效地处理Add和Update。
var AddUpdateQuery = from newdist in newSpec.Distributions
join oldDist in oSpec.Distributions
on newdist.Id equals oldDist.Id into matchingDistributions
select new { newdist, matchingDistributions };
foreach (var dist in AddUpdateQuery)
{
if (!dist.matchingDistributions.Any())
{
dist.newdist.operation = "Add";
//additional processing for "Add" operation.
}
else if (dist.newdist.Amount == dist.matchingDistributions.First().Amount)
{
dist.newdist.operation = "Update";
//additional processing for "Update" operation.
}
}