我在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));
为什么?
答案 0 :(得分:1)
这是因为您使用内部查询和逻辑(数学上)有一些不同。
示例:
假设您在订阅表中有以下记录(ID,SubscriberId,(DatetimeLastView&lt; DatetimeUpdated)为布尔值)
我不确定j
是什么,但假设您有两条记录(ID,订阅ID列表):
记录j2不会通过您的第二个查询,但会传递您的第一个查询,因为存在与SubscriberId == 1
(s2)的链接子记录,并且存在与s.DatetimeLastView < j.DatetimeUpdated
(s3)的链接订阅但是两者都没有记录。