0

假设我有几百万的记录表TAB1:如何编写SQL和LINQ以获取条件中某条记录的结果?

Tab1(id, id1,id2, value, ...) 

有了这样的SQL:

Select * from Tab1 Where id1=123; 

我得到100条记录。那么我想从这100条记录中获得一个最大的id值。

如何为此编写最简单的SQL?

当我使用EF将此表匹配到EF中的实体时,如何编写LINQ以获得相同的结果?

回答

4

这可以通过顺序完成BY和TOP。

在SQL:

SELECT TOP 1 * 
FROM Tab1 
WHERE id1 = 123 
ORDER BY id desc 

在LINQ为EF:

Tab1.Where(t => t.id1 == 123).OrderByDescending(t => t.id).FirstOrDefault(); 
+0

是的,您的解决方案更好,+1 –

+0

谢谢。分选解决方案的性能如何? – KentZhou

+0

如果您在id列上有索引,则性能完全可以忽略不计。如果它是主键,则可能已经为您创建。 – Sethcran

0

我认为最简单的方法可以是这样:

Select * from Tab1 Where id1=123 AND id = (SELECT First(Max(id)) from Tab1 where id1 = 123) 

可以删除First如果值是不同的(我不知道如何Max的行为,如果有具有相同最大值多行)

关于Linq你可以用类似于:

Tab1.Where(t => t.id == 123).OrderByDescending(t => t.id).FirstOrDefault(); 
+0

谢谢。这是我正在尝试。首先不适用于SQL Server 2008.也许只适用于2010?我会尝试你的LINQ。再次感谢。 – KentZhou

+0

Linq已经写过,2008年有什么不可用? –

+0

这是SQL Server 2008窗体'First'的错误消息:'First'不是公认的内置函数名称。 – KentZhou

相关问题