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

本文关键字:填充 字段 查询 LINQ 另一个 使用 | 更新日期: 2023-09-27 18:02:39

我有以下Linq,我可以使用Linq这样获得值IsPremiumUserIsLawFirm在去还是有任何其他的好方法来做到这一点?

我需要的是获得IsPremiumUserIsLawFirm的值基于他们的供应商id。我不想添加任何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()
     });

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

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

  • 使用"let"关键字
  • 尝试在中间数据结构中加载子查询数据,这些数据结构类似于具有关键PPSuppliers Id和值的哈希表,无论您需要分发什么数据,然后通过供应商上的单个foreach循环,我将在O(1)中从这些中间结构中窥视我需要添加的其他信息。

  • 使用存储过程:)