Linq innerJoin 再 LeftJoin,Where条件相关问题
主要代码如下(代码中GetRepository使用类似了仓储的东西,这个可以忽略, CreateQuery后即是IQueryable,类似expJM 为Expression表达式):
var repCus = ctx.GetRepository<Customer>();
var reptJm = ctx.GetRepository<CustomerJM>();
var reptCusUser = ctx.GetRepository<CustomerUser>();
var reptPartner = ctx.GetRepository<K2_Partner>();
var mainQuery = from jm in reptJm.CreateQuery().Where(expJm)
join cus in repCus.CreateQuery().Where(expCus)
on jm.Id equals cus.Id
join cusUser in reptCusUser.CreateQuery().Where(expCusUser)
on cus.Id equals cusUser.CustomerId
join partner in reptPartner.CreateQuery().Where(expPartner)
on cus.UserId equals partner.PartnerId into partnerJoin
from pj in partnerJoin.DefaultIfEmpty()
select new xxx
上面是代码,我贴一下有问题的 Expression:expPartner
Expression<Func<K2_Partner, bool>> expPartner = p => p.Deleted == false && p.AgentId == 0
生成的SQL 如下:
SELECT XXX(为简便,省略一大堆字段)
FROM [dbo].[CustomerJM] AS [Extent1]
INNER JOIN [dbo].[Customer] AS [Extent2] ON [Extent1].[Id] = [Extent2].[Id]
INNER JOIN [dbo].[CustomerUser] AS [Extent3] ON [Extent2].[Id] = [Extent3].[CustomerId]
LEFT OUTER JOIN [dbo].[K2_Partner] AS [Extent4] ON (0 = [Extent4].[Deleted]) AND (1 = [Extent4].[PartnerType]) AND ([Extent2].[UserId] = [Extent4].[PartnerId]) AND ([Extent4].AgentId =0)
WHERE (0 = [Extent2].[Deleted]) AND (4 = [Extent2].[CustomerType])
想请教下:如何将 LEFT OUTER JOIN 后面的 ([Extent4].AgentId =0)放到 WHERE 条件中。因为是左链接,AgentId可能为NULL,这样的结果无法得到 AgentId =0的结果