繁体   English   中英

必须有更好的方法在linq中添加此子句

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM