Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.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
C# 使用linq获取分组的逗号分隔值_C#_Linq_Linq To Objects_Grouping - Fatal编程技术网

C# 使用linq获取分组的逗号分隔值

C# 使用linq获取分组的逗号分隔值,c#,linq,linq-to-objects,grouping,C#,Linq,Linq To Objects,Grouping,我想要第三列“items”,其中包含分组的值 var dic = new Dictionary<string, int>(); dic.Add("a", 1); dic.Add("b", 1); dic.Add("c", 2); dic.Add("d", 3); var dCounts = (from i in dic group i by i.Value into g select new { g.Key, count = g.Count()});

我想要第三列“items”,其中包含分组的值

var dic = new Dictionary<string, int>();
dic.Add("a", 1);
dic.Add("b", 1);
dic.Add("c", 2);
dic.Add("d", 3);

var dCounts =
    (from i in dic
    group i by i.Value into g
    select new { g.Key, count = g.Count()});

    var a = dCounts.Where(c => c.count>1 );

dCounts.Dump();
a.Dump();
我想要这些结果:

Key Count Items
1   2     a, b
2   1     c
3   1     d
您可以使用:

var dCounts = 
    from i in dic 
    group i by i.Value into g 
    select new { g.Key, Count = g.Count(), Values = g }; 
通过分组(value
g
)创建的结果具有一个属性
Key
,该属性为您提供密钥,但它还实现了
IEnumerable
,允许您访问组中的各个值。如果只返回
g
,则可以使用
foreach
迭代所有值,或者使用LINQ处理它们

下面是一个简单的转储函数来演示这一点:

foreach(var el in dCounts) {
  Console.Write(" - {0}, count: {1}, values:", el.Key, el.Count);
  foreach(var item in el.Values) Console.Write("{0}, ", item);
|

使用
string.Join(“,”,{array})
,传入您的密钥数组。

如果使用string.Join,则获取异常(如Linq to entities)不会识别字符串。Join方法它不会;无法工作,因为EF无法识别C#方法字符串。Join()@LabLab原始问题不涉及EF。如果你有关于EF的问题,去问吧。简单地说:如果Microsoft数据团队不能参与语言集成,我也无能为力。他们用自己的不和谐来制造EF。我们在这里进行的是LINQ对话,不是EF。
from i in dic 
group i.Key by i.Value into g 
select new
{
  g.Key,
  count = g.Count(),
  items = string.Join(",", g.ToArray())
});
    var dCounts =
        (from i in dic
            group i by i.Value into g
            select new { g.Key, count = g.Count(), Items = string.Join(",", g.Select(kvp => kvp.Key)) });
from i in dic 
group i.Key by i.Value into g 
select new
{
  g.Key,
  count = g.Count(),
  items = string.Join(",", g.ToArray())
});