2010-01-19 170 views

回答

2

您可以在比equals其他什麼也沒join,但是這可能不是你想反正這裏。我會爭辯說,SQL查詢是不好寫的,並且日期比較應該在WHERE條款中,但我認爲這是主觀的。無論如何,這是該唯一辦法做到這一點Linq中:

var results = 
    from sm in salesman 
    join s in sales on sm.salesmanid equals s.salesmanid 
    where s.salesdate < sm.promotiondate 
    group s by s.salesmanid into g 
    select new { salesmanid = g.Key, maxsales = g.Max(s => s.quantity) }; 

注 - 組一行

+0

我剛剛讀了一個地方,你可以在連接後直接使用where子句來提高性能(過濾),然後在where子句之後繼續加入其他表。所以我現在要嘗試一下。 我想將這種方法應用於現有的數據庫,我已經遇到了一個SQL查詢加入過濾。它有大約200萬條記錄,以及我想要加入的表格。做一個直的where子句而不是使用過濾的連接會導致性能非常難。感謝您的回答,我現在要嘗試一下。我會讓你知道它是怎麼回事。 – Mike 2010-01-19 23:59:18

+0

@Mike - 嗯,如果條件是'JOIN'或'WHERE'的一部分,那麼無關緊要,DB服務器真正重要的是正確的列被索引。我更喜歡在實際的連接子句中編寫所有連接條件,但那只是因爲它更容易正確執行。 – Aaronaught 2010-01-20 00:03:56

+0

它似乎沒有任何區別。如你所說。再次感謝。 – Mike 2010-01-21 03:40:14

0

糾正錯字假設你有你的表之間的導航性能,你可以離開加盟實體框架。

var results = from s in salesmen 
       group s by s.salesmanid 
       select new 
       { 
        s.salesmanid, 
        maxsales = s.sales 
         .where(x => s.salesdate < x.promotiondate) 
         .max(x => x.quantity) 
       };