2010-11-30 49 views
27
var result = table1.Join(table2, o => o.ProgramID, t => t.ProgramID, (o, t) => new { o.ProgramID, t.Program }) 
     .OrderBy(t => t.Program) 
     .Distinct(); 

上述LINQ語句實際返回正確的結果,但他的SQL生成(下同)不是那麼簡單,因爲它可以LINQ to SQL的獨特和排序依據

SELECT [t2].[ProgramID], [t2].[Program] 
FROM (
    SELECT DISTINCT [t0].[ProgramID], [t1].[Program] 
    FROM [table1] AS [t0] 
    INNER JOIN [table2] AS [t1] ON [t0].[ProgramID] = [t1].[ProgramID] 
    ) AS [t2] 
ORDER BY [t2].[Program] 

我想到,SQL下面是更清潔,但我不確定linq聲明來實現它。

select distinct 
    o.ProgramID, 
    t.Program 
from 
    table1 0 
    inner join table2 t on t.ProgramID = o.ProgramID 
order by t.Program 

在此先感謝

+0

您是否嘗試過調用方法調用的順序?即交換orderby和不同? – marr75 2010-11-30 21:41:20

+0

真棒,交換了他們,並工作了一種享受。 – Ian 2010-12-01 02:09:55

回答

4

簡介兩個查詢,統計比較-IO和實際執行計劃。它完全有可能與SQL服務器沒有區別。

如果您確實想要知道TSQL,請使用ExecuteQuery-of-T並自行傳入TSQL。也許還包括一些鎖暗示(最常見的是:NOLOCK)

22

我不知道它是否有幫助,但你可以嘗試這樣的事情;

var result = (from o in table1 
       join t in table2 on o.ProgramID equals t.ProgramID 
       orderby t.Program 
       select new { o.ProgramID, t.Program }).Distinct(); 
10

我嘗試這樣的作品:

var result = (from o in table1 
       join t in table2 on o.ProgramID equals t.ProgramID 
       select new { o.ProgramID, t.Program }) 
       .Distinct().OrderBy(t => t.Program) 
         .ThenBy(t => t.ProgramName) 
         .ThenBy(t => t.Description); 

首先,你做的鮮明然後排序依據,然後排序依據工作。