选择在哪里Table.Value ==最大

问题描述:

我有一个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

试试这个

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

试试这个:

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) 

如何:

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

您可以将结果,责令按日期:

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

这是一个聪明的解决方案 – sooprise 2010-10-06 18:35:00

用流利的语法:

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