【问题标题】:Replace foreach to make loop into queryable替换 foreach 使循环变为可查询
【发布时间】:2015-06-08 10:47:48
【问题描述】:

我有一个返回报表对象的函数,但目前我正在查看 foreach,然后使用 asQueryable 方法。

我想在一个查询中完成,而不必使用 AsQueryable 函数。

var query = from item in context.Dealers
            where item.ManufacturerId == manufacturerId
            select item;

IList<DealerReport> list = new List<DealerReport>();

foreach (var deal in query)
{
  foreach (var bodyshop in deal.Bodyshops1.Where(x => x.Manufacturer2Bodyshop.Select(s => s.ManufacturerId).Contains(manufacturerId)))
  {
      DealerReport report = new DealerReport();
      report.Dealer = deal.Name;
      report.Bodyshop = bodyshop.Name;
      short stat = bodyshop.Manufacturer2Bodyshop.FirstOrDefault(x => x.ManufacturerId == manufacturerId).ComplianceStatus;
      report.StatusShort = stat;
      list.Add(report);
   }
}

return list.OrderBy(x => x.Dealer).AsQueryable();

【问题讨论】:

  • 您在Dealers 位上寻找SelectMany 吗?还是加入并取出子数据?
  • 我想选择很多,我想要一份所有经销商的列表以及他们的修理厂列表以及该制造商的状态

标签: c# performance linq asqueryable


【解决方案1】:

我想你想要这样的东西:

var query = from deal in context.Dealers
            where deal.ManufacturerId == manufacturerId
            from bodyshop in deal.Bodyshops1
            where bodyshop.Manufacturer2Bodyshop.Select(s => s.ManufacturerId).Contains(manufacturerId)
            let stat = bodyshop.Manufacturer2Bodyshop.FirstOrDefault(x => x.ManufacturerId == manufacturerId)
            orderby deal.Name
            select new DealerReport
            {
                Dealer = deal.Name,
                Bodyshop = bodyshop.Name,
                StatusShort = stat != null ? stat.ComplianceStatus : 0, // or some other default
            };

return query;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-04
    • 2018-08-20
    • 2013-07-08
    • 2015-01-21
    • 2014-05-14
    • 1970-01-01
    • 2021-10-21
    相关资源
    最近更新 更多