繁体   English   中英

使用 linq 迭代对象的最佳方法是什么

[英]What is the best way to iterate objects using linq

           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";
          }

我计划从查询结果中收集对象并处理它们,有没有更简单的方法来实现我正在做的事情?

在您的原始代码段中,您正在匹配AddQueryIdUpdateQueryDistributionId 如果这是一个拼写错误并且这两种情况都应该是IdDistributionId ,那么您可以在同一个循环中更有效地处理 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.
        }
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM