[英]There has to be a better way to add this clause in linq
var result = from R in db.Clients.Where(clientWhere)
join RA in db.ClientAgencies on R.SysID equals RA.SysID
join A in db.Agencies.Where(agencyWhere) on RA.AgencyID equals A.AgencyID
join AC in db.AdCommittees on A.AgencyID equals AC.AgencyID into temp
from x in temp.DefaultIfEmpty().Distinct()
select new {R,RA,x};
如果用户输入CommissionID,这就是我要做的,但是我认为必须有一个更好的方法。
var query = (from R in result
where R.x.CommitteeID == params.CommitteeID
select R.R).Distinct();
return query;
有没有更好的办法?
您如何使用数据。 取决于您要实现的目标,联接可能会伤害您(如果没有数据结构的上下文,这对于我们来说很难查看)。
我不能对linq感到不满意,只能说您似乎已经拥有可能不需要的数据日志。
我遇到的另一个问题是调用DefaultIfEmpty()时将执行查询。 这意味着要进行过滤,您可能会再次点击数据库以计算其结果。
您能否提供有关数据库架构的信息以及您要从查询中获取的信息?
如果您没有将中间查询用于其他任何事情,那么我将其翻转(首先按committeeID
过滤):
Client GetCommitteeClient(int committeeID)
{
return (
from AC in db.AdCommittees
where AC.CommitteeID == committeeID
join A in db.Agencies.Where(agencyWhere) on AC.AgencyID equals A.AgencyID
join RA in db.ClientAgencies on A.AgencyID equals RA.AgencyID
join R in db.Clients.Where(clientWhere) on RA.SysID equals R.SysID
select R
).SingleOrDefault();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.