在linq中选择Count(Id)

uno*_*aii 8 c# linq

有没有办法写一个linq查询导致:

select Count(Id) from tbl1
Run Code Online (Sandbox Code Playgroud)

因为

tbl1.Select(q=>q.Id).Count()
Run Code Online (Sandbox Code Playgroud)

不会转化为我想要的结果

更新:

它返回:

select count(*) from tbl1
Run Code Online (Sandbox Code Playgroud)

回答后更新:

我测试了这个场景超过21,000,000

执行计划

记录计数

Fel*_*ani 6

有没有办法写一个linq查询来导致.

不.首先要了解您的需求,对于样品T-SQL,您可以使用:

  • COUNT(*) 将计算表中的行数
  • COUNT(column) 将计算列中的条目 - 忽略空值.

如果您需要计算您拥有的行数,请使用

var total = tbl1.Count();
Run Code Online (Sandbox Code Playgroud)

如果需要查看特定列不为空的实体数,请使用Count方法的过滤器重载.

var total = tbl1.Count(x => x.Id != null);
Run Code Online (Sandbox Code Playgroud)

不,这是不可能的.使用Count(*)或''Count(Id), even more if yourId`是主键时,性能没有差异.

我做了一个带有超过一百万个元组的表的实验.查看两个查询的执行计划.第一个是select count(*)第二个,第二个是select count(id).这id是主键(对不起,结果在葡萄牙语 - 巴西):

在此输入图像描述


Kva*_*vam 5

count(field)在sql中使用计算所有非空值.在linq,你可以说:

tbl1.Where(q => q.Id != null).Count();
Run Code Online (Sandbox Code Playgroud)

或者干脆:

tbl1.Count(q => q.Id != null);
Run Code Online (Sandbox Code Playgroud)

  • @unosbaghaii你应该提供样本数据和预期答案.在数据库相关问题中确实是必要的. (2认同)