业务逻辑:
1、计划联系客户集合
2、已联系客户集合(有联系日期 OccurDate)
要求:给出指定日期,获得计划联系但未联系的客户集合。
当前代码:
//计划联系日期,默认为当天 if (!willTelDate.HasValue) { willTelDate = DateTime.Today; } var beginDate = willTelDate.Value.Date; var endDate = willTelDate.Value.Date.AddDays(1); //指定日期计划联系但未联系客户集合 var willTelUntelQuery = willTelQuery.Where(x => !_telInfoRepository.Table .Where(t => t.CustomerId == x.Id) .Where(t => t.OccurDate >= beginDate && t.OccurDate < endDate) .Any() );
这里用到Any,性能打了折扣(或者没打折扣?确认下),想进一步优化。
分数计划30分,暂时不悬赏。
谢谢。
var willTelUntelQuery = willTelQuery.Where(x=>!_telInfoRepository.Table.Any(t=>t.CustomerId==x.Id && t=>t.OccurDate>=beginDate && t.OccurDate<endDate))
你这个的性能跟我的一样吧?我不确定。
我是怕any是求结果的方法,是否会导致查询的立即执行。
换句话说,我希望这个查询在执行的时候只是执行了一次SQL语句,而不是执行多次。
非常感谢!
@519740105: Any是延时执行的。。好像只有ToList(),ToArray() 这些方法会立即执行。另外即便是立即执行,这个SQL语句也是执行一次啊。
@咦?: 本质上,你的写法跟我的写法是一样的。
@519740105: 你看一下生成的SQL语句就,应该不一样。。
@咦?: 也许生成的语句会有区别,但处理逻辑是一样的。
刚检查了我的代码生成的SQL,是能一次性完成,也就是说我的linq也是OK的。
感谢关注!
@咦?: 奇怪,怎么没给你分?