我有一个包含客户名称列的表。它有大约10-15个不同的客户端,在列中多次出现。有没有办法可以运行一个查询,列出所有不同的客户端并为每个客户端执行计数,以便显示每个客户端在列中出现的次数?我知道在SQL中你可以使用as来分配临时列,但我是LINQ的新手,并且不知道这是否可行。
任何帮助都会很棒,谢谢。
答案 0 :(得分:5)
就像使用GROUP BY
和COUNT
的SQL一样,如下所示:
SELECT name, COUNT(*)
FROM customers
GROUP BY name
LINQ中的您可以使用GroupBy(...)
和Count()
,如下所示:
var res = src.Clients
.GroupBy(c => c.Name)
.Select(g => new {
Name = g.Key
, Count = g.Count()
});
答案 1 :(得分:3)
我认为items
包含具有ClientName
使用Linq GroupBy
方法。
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
});
答案 2 :(得分: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
是您希望区分的列。
答案 3 :(得分: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
。
顺便说一下,在询问之前你应该多搜索一下。