代码之家  ›  专栏  ›  技术社区  ›  DForck42

使实体框架重用一个值

  •  3
  • DForck42  · 技术社区  · 6 年前

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

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

    它会产生如下结果:

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

    然后传递值两次。有没有一种方法可以使生成的SQL更干净,并且只传递一次lastupdatedate并重用变量?

    1 回复  |  直到 6 年前
        1
  •  1
  •   Ivan Stoev    6 年前

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

    我只知道模仿 let 子句通过使用两个中间投影-第一个是以匿名类型包装变量和查询元素,第二个是在使用包装变量应用筛选器后展开元素:

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