Linq什么时候返回算什么选择?

Tom*_*len 2 linq return linq-to-sql

我有这样做的愚蠢习惯:

return 
    (from c in db.tblUserAlerts 
     where c.userID == UserID && !c.hasRead  
     select new { c.ID }).Count();
Run Code Online (Sandbox Code Playgroud)

是否更好(节省内存)返回c.ID到整个c记录?例:

return 
    (from c in db.tblUserAlerts 
     where c.userID == UserID && !c.hasRead 
     select c).Count();
Run Code Online (Sandbox Code Playgroud)

Ada*_*nes 5

我认为问题在于数据需要经历多少转型.对于你想要做的事情,我认为效率最高的是:

return db.tblUserAlerts.Count(c=>c.userID == UserID && !c.hasRead);
Run Code Online (Sandbox Code Playgroud)

因为您实际上只是通过1种方法运行数据,而不是复制或转换数据,只计算与谓词匹配的内容.

编辑:我再次看了你的标签,看到你有linq-to-sql.如果您使用的是查询提供程序(如LINQ to SQL),则会转换查询.我猜想linq-to-sql查询翻译器会转换为:

SELECT count(c.ID) FROM tblUserAlerts WHERE c.userID == 'UserID' AND NOT c.hasRead
Run Code Online (Sandbox Code Playgroud)

在这种情况下,不应该有任何速度差异,除了LINQ-to-SQL可能需要在翻译查询时做更多的工作,因为表达式树中有更多.速度差异几乎可以忽略不计.我上面的原始答案更适用于LINQ-to-Objects.使用LINQ-to-SQL,除非你对任何速度降低都非常敏感(即你在紧密循环中运行了数千次),它们应该大致相同.