我有以下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()
});
答案 0 :(得分:0)
我会让一个分析器看看SQL EF正在生成什么然后我会做出决定:如果查询看起来很复杂并且可能产生性能问题,那么我会尝试做其他事情:
尝试在中间数据结构中加载子查询数据,这些数据结构与关键字PPSuppliers Id和值上的散列表相似,无论您需要分配什么数据,然后在供应商处使用单个foreach循环,我会偷看从O(1)中的这些中间结构我需要添加的其他信息。
使用存储过程:)