如何编写SQL和LINQ从哪个条件的结果中获取一条记录?

时间:2013-08-01 14:02:48

标签: sql linq sql-server-2008 entity-framework sql-server-2008-r2

假设我有一个包含数百万条记录的表Tab1:

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

使用SQL:

Select * from Tab1 Where id1=123;

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

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

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

2 个答案:

答案 0 :(得分:4)

这可以通过ORDER 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();

答案 1 :(得分: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();