使用LINQ中另一个子查询的值填充字段

时间:2015-07-14 09:36:52

标签: c# asp.net-mvc linq linq-to-sql

我有以下Linq,我可以使用这样的LINQ来获取 IsPremiumUser IsLawFirm 的值,还是有其他好方法可以做到这一点?

我需要的是根据供应商ID获取 IsPremiumUser IsLawFirm 的值。我不想添加任何foreach来完成这项工作,我可以使用LINQ来获取这些值

var supplierListQuery = 
    (from sup in db.PPSuppliers
     select new SearchResultSupplierViewModel
     {
         SupplierId = sup.PPSupplierId,
         SupplierLocation = sup.LocationsForDisplay,
         CreatedDate = (DateTime)sup.CreatedDate,
         PPMemberId = sup.PPMemberId,
         IsPremiumUser =
             (from u in db.PPSubscriptions
              join s in db.PPSubscriptionPlans on u.SubscriptionPlanId equals s.SubscriptionPlanId
              where u.PPMemberId == sup.PPMemberId && u.SubscriptionEndDate >= System.DateTime.Now
              orderby u.SubscriptionStartDate descending
              select s).FirstOrDefault().isPremium,
         IsLawFirm = 
             (from l in db.PPSupplierSupplierTypes 
              join f in db.PPSupplierTypes on l.PPSupplierTypeId equals f.PPSupplierTypeId
              where l.PPSupplierId == sup.PPSupplierId && f.PPSupplierTypeId == 1
              select l).Any()
     });

1 个答案:

答案 0 :(得分:0)

我会让一个分析器看看SQL EF正在生成什么然后我会做出决定:如果查询看起来很复杂并且可能产生性能问题,那么我会尝试做其他事情:

  • 使用“let”关键字
  • 尝试在中间数据结构中加载子查询数据,这些数据结构与关键字PPSuppliers Id和值上的散列表相似,无论您需要分配什么数据,然后在供应商处使用单个foreach循环,我会偷看从O(1)中的这些中间结构我需要添加的其他信息。

  • 使用存储过程:)