如果我做一个伯爵,Linq会先检索所有记录吗?

Xai*_*oft 7 c# linq-to-sql

假设我有一个名为Population的表来存储一些人口统计数据.在T-SQL中,要获得超过50的人数,我可能会这样做:

SELECT COUNT(*) FROM POPULATION
WHERE AGE > 50
Run Code Online (Sandbox Code Playgroud)

我认为以下linq语句可以工作,但它只返回零,我不明白为什么.

var count = _context.Population.Count(x => x.Age > 50);
Run Code Online (Sandbox Code Playgroud)

为了让我真正得到计数,我必须做以下任何一种情况:

var count = _context.Populaton.Where(x => x.Age > 50).Count();

var count = _context.Population.Select(x => x.Age > 50).Count();
Run Code Online (Sandbox Code Playgroud)

上述情况为何如此?

rcr*_*ens 2

Linq 不会首先检索所有记录。它将查询的执行推迟到最后一刻。这允许优化查询。

http://blogs.msdn.com/b/charlie/archive/2007/12/09/deferred-execution.aspx

我发现有时顺序很重要。希望这可以帮助。

鲍勃