Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linq 不同的查询?_Linq - Fatal编程技术网

Linq 不同的查询?

Linq 不同的查询?,linq,Linq,我有一个表,其中包含一个具有客户机名称的列。它有大约10-15个不同的客户端,在该列中多次出现。有没有一种方法可以让我运行一个查询,列出所有不同的客户机,并对每个客户机进行计数,从而显示每个客户机在列中出现的次数?我知道在SQL中可以使用as来分配临时列,但我对LINQ是新手,不知道这是否可行 任何帮助都会很好,谢谢。我假设项目包含具有客户端名称的元素 使用LinqGroupBy方法 var result = (from item in items group ite

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


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

我假设
项目
包含具有
客户端名称的元素

使用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
              });
像这样的

查询语法:

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
是您想要区分的列。

就像SQL一样,您可以使用
分组依据
计数
,如下所示:

SELECT name, COUNT(*)
FROM customers
GROUP BY name
var res = src.Clients
    .GroupBy(c => c.Name)
    .Select(g => new {
        Name = g.Key
    ,   Count = g.Count()
    });
在LINQ中,您将使用
GroupBy(…)
Count()
,如下所示:

SELECT name, COUNT(*)
FROM customers
GROUP BY name
var res = src.Clients
    .GroupBy(c => c.Name)
    .Select(g => new {
        Name = g.Key
    ,   Count = g.Count()
    });

您可以这样做:

SELECT name, COUNT(*)
FROM customers
GROUP BY name
var res = src.Clients
    .GroupBy(c => c.Name)
    .Select(g => new {
        Name = g.Key
    ,   Count = g.Count()
    });
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的更多信息:


顺便说一句,在问问题之前,你应该多搜索一些。

想象一下,你有两个完全不同的客户同名。你怎么看?+1表示答案,当然,也表示对相似性的解释。=)哦,我还想评论一下——上面的例子叫做“查询语法”,第二个是“方法语法”。