Linq innerJoin 再 LeftJoin,Where条件相关问题

warfen 2015-09-21 09:25:40
主要代码如下(代码中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的结果
...全文
369 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaoxiangqing 2015-09-29
  • 打赏
  • 举报
回复
只能放在where条件里
  • 打赏
  • 举报
回复
Expression<Func<int, bool>> exp = p => p != 0;
List<int> list = new List<int>();
var query = from i in list
            join j in list on i equals j
            where exp.Compile()(j)
            select i;
给你参考下怎么将exp 写到where条件里去,不是跟在集合的Where方法里
devmiao 2015-09-21
  • 打赏
  • 举报
回复
用DefautIfEmpty
内容概要:本文围绕基于三重移相控制(TPS)的双有源桥(DAB)高频隔离DC-DC变换器开展系统性研究,重点构建了其在Simulink环境下的高精度仿真模型。研究全面涵盖SPS单相移相、DPS双重重移相与TPS三重移相等多种控制策略的建模、实现与性能对比,深入分析不同模式下变换器的功率传输特性、软开关实现条件及功率回流问题,旨在提升DAB在交直流混合微电网、能量路由器、多端口柔性互联装置等场景中的转换效率与动态响应能力。通过对ZVS(零电压切换)条件的精确控制与移相角参数的优化,有效降低了开关损耗,增强了系统整体能效与运行稳定性。该仿真模型具有良好的可扩展性,适用于复杂电能转换系统的科研验证与工程开发。; 适合人群:电力电子、电气工程及其自动化等相关专业的硕士研究生、博士生、科研人员以及从事新能源变换器、柔性输配电系统设计的工程技术人员。; 使用场景及目标:①掌握双有源桥DAB变换器的基本工作原理及其在高频隔离场合的核心优势;②深入理解三重移相控制策略的设计机理、控制自由度分配及其在效率优化中的关键作用;③构建并调试可用于科研论文撰写、项目申报或实际系统验证的高保真Simulink仿真模型,支撑理论分析与实验对比。; 阅读建议:建议结合MATLAB/Simulink平台进行动手实践,重点关注主电路拓扑搭建、移相控制模块设计、驱动信号时序配置及ZVS实现条件的仿真观测,推荐通过对比SPS、DPS与TPS三种模式的稳态与动态响应曲线,深入掌握各控制策略的适用边界与优化方向。

8,492

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 LINQ
社区管理员
  • LINQ
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧