2011-07-29 97 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 –