EF 7 AND 2之间的语句不按预期工作

时间:2017-02-25 16:20:50

标签: entity-framework

我在SO上看到.Where上的IQueryable表示两者之间的AND。但我有一个案例,这在主要细节计划中没有按预期工作 这样:

    query = query.Where(j => j.Subscriptions.Any(s => s.SubscriberId == 1));
    query = query.Where(j => j.Subscriptions.Any(s => s.DatetimeLastView < j.DatetimeUpdated));

然后返回更多记录:

    query = query.Where(j => j.Subscriptions.Any(s => s.DatetimeLastView < j.DatetimeUpdated && s.SubscriberId == 1));

为什么?

1 个答案:

答案 0 :(得分:1)

这是因为您使用内部查询和逻辑(数学上)有一些不同。

示例:

假设您在订阅表中有以下记录(ID,SubscriberId,(DatetimeLastView&lt; DatetimeUpdated)为布尔值)

  • (s1,1,true)
  • (s2,1,false)
  • (s3,2,true)

我不确定j是什么,但假设您有两条记录(ID,订阅ID列表):

  • (j1,[s1])
  • (j2,[s2,s3])

记录j2不会通过您的第二个查询,但会传递您的第一个查询,因为存在与SubscriberId == 1(s2)的链接子记录,并且存在与s.DatetimeLastView < j.DatetimeUpdated(s3)的链接订阅但是两者都没有记录。