2

我有一个表,其中包含一个带有客户名称的列。它有大约 10-15 个不同的客户,在列中多次出现。有没有一种方法可以运行一个查询来列出所有不同的客户端并对每个客户端进行计数,以便显示每个客户端在列中出现的次数?我知道在 SQL 中您可以使用 as 来分配临时列,但我是 LINQ 的新手,不知道这是否可能。

任何帮助都会很棒,谢谢。

4

4 回答 4

5

就像使用GROUP BYand的 SQL 一样COUNT,如下所示:

SELECT name, COUNT(*)
FROM customers
GROUP BY name

在 LINQ 中,您将使用GroupBy(...)and Count(),如下所示:

var res = src.Clients
    .GroupBy(c => c.Name)
    .Select(g => new {
        Name = g.Key
    ,   Count = g.Count()
    });
于 2013-02-01T15:09:50.240 回答
3

我假设items包含具有ClientName

使用 LinqGroupBy方法。

var result = (from item in items
              group item by item.ClientName 
              into g  // g is the group
              select new 
              {
                  ClientName = g.Key,  // g.Key contains the key of the group ;) -> here the common "ClientName"
                  Count = g.Count()  // g is an enumerable over the elements of the group, so g.Count() gives you the number of elements in the group
              });
于 2013-02-01T15:08:54.867 回答
3

像这样的东西?

查询语法:

from r in someTable
group r by r.ClientId into grp
select new
    {
        ClientId = grp.Key,
        Occurrences = grp.Count(),
    }

作为方法语法:

someTable
    .GroupBy(r => r.ClientId)
    .Select(grp => new
        {
            ClientId = grp.Key,
            Occurrences = grp.Count(),
        });

ClientId您要区分的列在哪里。

于 2013-02-01T15:09:11.180 回答
2

你可以这样做:

linq

var query = from item in list
            group by item.name into gr
            let count=gr.Count()
            orderby count
            select new {Value = gr.Key, Count=count }

使用lambda 表达式

var query= entity.GroupBy(s=>s.Name).
                  Select(x=> new {Value = x.Key,Count=x.Count()}).
                  OrderBy(s=>s.Count);

在此处阅读有关 linq 的更多信息:Linq Samples.

顺便说一句,您应该在询问之前进行更多搜索。

于 2013-02-01T15:14:02.303 回答