使实体框架重用成为价值

时间:2018-08-01 18:59:29

标签: c# sql entity-framework-6

每当我需要用相同的值过滤多个值时,如下所示:

.Where(lead => lead.UpdateDate >= lastupdatedDate 
|| lead.Address.lasUpdateDate >= lastupdatedDate
)

它会生成如下内容:

select *
from lead
where UpdateDate >= @p__linq__1
or lasUpdateDate >= @p__linq__2

,然后将值传递两次。有没有一种方法可以使生成的sql更加整洁,并使它仅通过一次lastupdatedDate并重用该变量?

1 个答案:

答案 0 :(得分:1)

不幸的是,这是EF6查询翻译缺陷。

我知道的唯一(丑陋)的解决方法是通过使用两个中间投影来模拟let子句-首先将变量和query元素包装为匿名类型,然后使用包装的变量:

.Select(lead => new { lead, lastupdatedDate }) // (1)
.Where(e => e.lead.UpdateDate >= e.lastupdatedDate 
    || e.lead.Address.lasUpdateDate >= e.lastupdatedDate)
.Select(e => e.lead) // (2)