【问题标题】:Fill fields using value from another subquery in a LINQ使用 LINQ 中另一个子查询的值填充字段
【发布时间】:2015-10-02 20:59:30
【问题描述】:

我有以下 Linq,我可以像这样使用 LINQ 来获取 IsPremiumUserIsLawFirm 的值吗?或者有没有其他好的方法可以做到这一点?

我需要的是根据供应商 ID 获取 IsPremiumUserIsLawFirm 的值。我不想添加任何 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()
     });

【问题讨论】:

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


    【解决方案1】:

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

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

    • 使用存储过程:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-10
      • 2019-06-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-18
      • 1970-01-01
      相关资源
      最近更新 更多