2011-07-29 98 views
3

我正试图执行两个表之间的连接,并通过3个条件限制结果。 2个条件属于主表,第三个条件属于副表。下面是我试图查询:LINQ连接行为奇怪

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); 

它是为了参加由内容识别的两个表,然后筛选基础上,metaID(类型的文章),statusID,然后得到是更大的所有文章比日期时间created。问题是它返回2条记录(当前为4条)。其中一个date_created小于created,另一个是首先产生created(因此相等)的记录。

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

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

+1

你还可以发布4行数据吗? – VVS

+1

检查LinqPad如果你还没有 – hunter

+0

它也可能有助于看到你的模式。 metaID,content_statusID和date_created的数据类型也可能会发挥作用 - 对于我来说(对于不熟悉代码的人来说)很容易对这些数据类型做出假设。 –

回答

0

在你的建议,我张贴的答案我的评论:

“这也可能有助于看看你的架构metaID, content_statusID的数据类型,以及DATE_CREATED可能会发挥作用,如好吧 - 对我来说(对你的代码不熟悉的人)很容易对这些数据类型做出假设。“

2

我似乎无法添加评论,但在调试模式下,您应该可以在此代码行上放置一个断点。当你这样做的时候,你应该可以将它悬停在它上面并让它告诉你LINQ生成的sql。请发布该SQL。

+5

或者激活DataContext日志记录(例如'this.Context.Log = Console.Out') – VVS

+1

+1 –