2010-10-06 62 views
3

我有一個SQL表如下設計:選擇在哪裏Table.Value ==最大

TableSchedule: 
Id 
Description 
ImportedDate 

我可以導入了大量的項目,他們將都具有相同的ImportedDate。

我該如何編寫只抓取最新ImportedDate條目的LINQ查詢?

var ResultSchedule = 
    from a in Db.TableSchedule 
    where a.ImportedDate == (Newest?) 
+0

爲什麼LINQ?這應該真的在數據庫服務器上處理。 – 2010-10-06 18:23:04

+2

@David Lively - 它將在服務器上進行處理,假設他正在使用帶有linq提供程序的ORM而不是對象。 – Lee 2010-10-06 18:27:08

回答

1

試試這個

var ResultSchedule = 
from a in Db.TableSchedule 
where a.ImportedDate == (from item in DB.TableSchedule Select item.ImportedDate).Max() 
+0

不可以。就我對LINQ的理解而言,創建的表達式樹僅導致1個數據庫查詢。如果我錯了,請告訴我。 – Viv 2010-10-06 18:50:44

+0

是的,你是對的。我把它收回。好的解決方案 – Yakimych 2010-10-06 19:13:00

0

試試這個:

Select * From Table 
    Where ImportedDate = 
    (Select max(ImportedDate) From Table) 

如果你需要爲每個[某件事]公司,比如,爲每個客戶,然後進行siubquery的最新記錄相關

Select * From Table t 
    Where ImportedDate = 
    (Select max(ImportedDate) 
     From Table 
     Where Customer = t.Customer) 
0

如何:

var ResultSchedule = from a in Db.TableSchedule 
        let max = Db.TableSchedule.Max(i => i.ImportedDate) 
        where a.ImportedDate == max 
        select a; 
+0

這種方法是否被認爲是比Vivek建議的方法「更好的做法」? – sooprise 2010-10-06 18:29:14

+0

@Soo - 如果您使用'max'值進行更多比較,使用'let'可能會派上用場。在這種情況下,您不必複製較長的行。 – Yakimych 2010-10-06 19:19:10

0

您可以將結果,責令按日期:

var ResultsSchedule = Db.TableSchedule. 
         GroupBy(a => a.ImportedDate). 
         OrderByDescending(g => g.Key). 
         FirstOrDefault(). 
         Select(g => g); 
+0

這是一個聰明的解決方案 – sooprise 2010-10-06 18:35:00

0

用流利的語法:

var ResultSchedule = 
    Db.TableSchedule.Where(
     a => a.ImportedDate.Equals(Db.TableSchedule.Max(b => b.ImportedDate)) 
    );