我正在尝试在两个表之间执行连接并将结果限制为 3 个条件。其中2个条件属于主表,第三个条件属于二级表。这是我正在尝试的查询:

var articles = (from article in this.Context.contents
                join meta in this.Context.content_meta on article.ID equals meta.contentID
                where meta.metaID == 1 && article.content_statusID == 1 && article.date_created > created
                orderby article.date_created ascending
                select article.content_text_key);

它的意思是通过 contentID 连接两个表,然后根据 metaID(文章类型)、statusID 进行过滤,然后获取所有大于 datetime created 的文章。问题是它返回 2 条记录(目前有 4 条记录)。一个 date_created 小于 created,另一个是首先产生 created 的记录(因此相等)。

通过删除元数据的连接和 where 子句,结果不会产生任何记录(预期)。我无法理解的是,当我将此连接转换为常规 SQL 时,它工作得很好。显然,我误解了 join 在这种情况下的功能。什么会导致这种行为?

编辑:
在 LinqPad 中尝试过这个后,我注意到 LinqPad 提供了预期的结果。我已经在代码中分别尝试了这些查询,直到添加了连接,奇怪的结果才开始填充它似乎发生在记录与限制器在同一天发生的任何日期比较中。

最佳答案

根据您的建议,我将我的评论作为答案发布:

关于c# - LINQ 加入行为异常,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6876817/

10-13 09:49