[英]Select Count(Id) in linq
有沒有辦法寫一個linq查詢來導致。
不。首先是要了解你的需求,對於樣本,在T-SQL
,你可以使用:
COUNT(*)
將計算表中的行數 COUNT(column)
將計算COUNT(column)
的條目 - 忽略空值。 如果您需要計算您擁有的行數,請使用
var total = tbl1.Count();
如果需要查看特定列不為null的實體數,請使用Count
方法的過濾器重載。
var total = tbl1.Count(x => x.Id != null);
不,這是不可能的。 使用Count(*)
或'Count(Id) , even more if your
性能沒有差異, even more if your
Id`是主鍵,則更多。
我做了一個帶有超過一百萬個元組的表的實驗。 查看兩個查詢的執行計划。 第一個是select count(*)
,第二個是select count(id)
。 id
是主鍵(抱歉結果在portuguese-brazil中):
在sql中使用count(field)
計算所有非空值。 在linq,你可以說:
tbl1.Where(q => q.Id != null).Count();
或者干脆:
tbl1.Count(q => q.Id != null);
得到的可能性
從tbl1中選擇Count(Id)
將會
tbl1.Where(q => q.Id != null).Select(x => x.Id).Distinct().Count();
以上Where
可以避免null
值。 如果您還希望對它們進行計數,則需要消除Where
,並Select
adjust以處理null
條目。
此外,如果您不想僅計算不同的值,則可以忽略Select
和Distinct
部分。
為了執行與SQL Count(Id)
相同的功能,您可以使用LINQ GroupBy,然后評估每個組。 這是一個簡短的完整片段:
using System;
using System.Collections.Generic;
using System.Linq;
namespace CrashTest
{
class Program
{
public static void Main()
{
List<MyObj> objs = new List<MyObj>
{
new MyObj{Id = 1, MyType = "toto"},
new MyObj{Id = 1, MyType = "tata"},
new MyObj{Id = 1, MyType = "tutu"},
new MyObj{Id = 1, MyType = "titi"},
new MyObj{Id = 2, MyType = "toto"},
new MyObj{Id = 2, MyType = "tata"},
};
var g = objs.GroupBy(i => i.Id);
foreach (var group in g)
{
Console.Out.WriteLine("There is " + group.Count() + " objs of ID:" + group.Key);
}
Console.Out.WriteLine("There is " + g.Count() + " different ids");
}
}
public class MyObj
{
public int Id { get; set; }
public string MyType { get; set; }
}
}
哪個會輸出:
There is 4 objs of ID:1
There is 2 objs of ID:2
There is 2 different ids
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.