簡體   English   中英

在 linq 中選擇 Count(Id)

[英]Select Count(Id) in linq

有沒有辦法編寫一個 linq 查詢來導致:

select Count(Id) from tbl1

因為

tbl1.Select(q=>q.Id).Count()

不會轉化為我想要的結果

更新 :

它返回:

select count(*) from tbl1

回答后更新:

我測試了超過 21,000,000 個場景

執行計划

記錄數

有沒有辦法寫一個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條目。

此外,如果您不想僅計算不同的值,則可以忽略SelectDistinct部分。

為了執行與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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM