【发布时间】:2011-10-16 03:36:15
【问题描述】:
我正在尝试在两个表之间执行连接并将结果限制为 3 个条件。其中2个条件属于主表,第3个条件属于辅助表。这是我正在尝试的查询:
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过滤,然后得到所有大于datetimecreated的文章。问题是它返回 2 条记录(目前为 4 条)。一个的date_created 小于created,另一个是最初产生created 的记录(因此相等)。
通过删除元数据的连接和 where 子句,结果不会产生任何记录(预期)。我无法理解的是,当我将此联接转换为常规 SQL 时,它工作得很好。显然我误解了join 在这种情况下的功能。什么会导致这种行为?
编辑:
在 LinqPad 中尝试过此操作后,我注意到 LinqPad 提供了预期的结果。我已经在代码中分别尝试了这些查询,直到添加连接后才会开始填充奇怪的结果它似乎发生在记录与限制器在同一天发生的任何日期比较中.
【问题讨论】:
-
4行数据能不能也贴一下?
-
如果您还没有,请查看 LinqPad
-
它也可能有助于查看您的架构。 metaID、content_statusID 和 date_created 的数据类型也可能发挥作用——我(不熟悉您的代码的人)很容易对这些数据类型做出假设。
-
@hunter:在一个完整的 wtf 时刻,我复制/粘贴到了 LinqPad(很棒的工具顺便说一句,谢谢),同样的查询完全符合我的预期。
-
@Dan Esparza: metaID (int), content_statusID(short), date_created (datetime)。
标签: c# linq-to-sql inner-join