LINQ中的GroupBy字符串和计数

LINQ中的GroupBy字符串和计数,linq,Linq,我有一个收藏。coll具有以下字符串: Location="Theater=1, Name=regal, Area=Area1" Location="Theater=34, Name=Karm, Area=Area4445" 等等。我必须从字符串中提取名称位。例如,这里我必须提取文本'regal'并对查询进行分组。然后将结果显示为 Name=regal Count 33 Name=Karm Count 22 我正在努力回答这个问题: 集合。位置。分组依据(??);(此处添加的内容) 哪种

我有一个收藏。coll具有以下字符串:

Location="Theater=1, Name=regal, Area=Area1"

Location="Theater=34, Name=Karm, Area=Area4445"
等等。我必须从字符串中提取名称位。例如,这里我必须提取文本'regal'并对查询进行分组。然后将结果显示为

Name=regal Count 33
Name=Karm  Count 22
我正在努力回答这个问题:

集合。位置。分组依据(??);(此处添加的内容)


哪种方法最短、最精确?

提取字符串后,只需按字符串分组并计算结果:

var query = from location in locations
            let name = ExtractNameFromLocation(location)
            group 1 by name in grouped
            select new { Name=grouped.Key, Count=grouped.Count() };
然而,这并不是特别有效。它必须在进行任何计数之前进行所有分组。查看LINQ to对象的扩展方法, 这是另一种看待LINQ的方式


编辑:ExtractNameFromLocation是从您的答案中提取的代码,例如


下面是另一个LINQ替代解决方案,并提供了一个工作示例

static void Main(string[] args)
{
    System.Collections.Generic.List<string> l = new List<string>();
    l.Add("Theater=1, Name=regal, Area=Area"); l.Add("Theater=34, Name=Karm, Area=Area4445");

    foreach (IGrouping<string, string> g in l.GroupBy(r => extractName(r)))
    {
        Console.WriteLine( string.Format("Name= {0} Count {1}", g.Key, g.Count())  );
    }
}
private static string extractName(string dirty)
{
    System.Text.RegularExpressions.Match m =
        System.Text.RegularExpressions.Regex.Match(
        dirty, @"(?<=Name=)[a-zA-Z0-9_ ]+(?=,)");

    return m.Success ? m.Value : "";
}
static void Main(字符串[]args)
{
System.Collections.Generic.List l=新列表();
l、 添加(“剧院=1,名称=regal,面积=Area”);l.Add(“剧院=34,名称=Karm,面积=Area4445”);
foreach(l.GroupBy(r=>extractName(r))中的igroupingg)
{
WriteLine(string.Format(“Name={0}Count{1}”,g.Key,g.Count());
}
}
私有静态字符串提取名称(字符串脏)
{
System.Text.RegularExpressions.Match m=
System.Text.RegularExpressions.Regex.Match(

肮脏,@”(?另一种Linq+Regex方法:

string[] Location = {
                        "Theater=2, Name=regal, Area=Area1",
                        "Theater=2, Name=regal, Area=Area1",
                        "Theater=34, Name=Karm, Area=Area4445"
                    };

var test = Location.Select(
                            x => Regex.Match(x, "^.*Name=(.*),.*$")
                                      .Groups[1].Value)
                   .GroupBy(x => x)
                   .Select(x=> new {Name = x.Key, Count = x.Count()});

测试字符串的查询结果


ExtractNameFromLocation将包含哪些内容?完整查询的Plz帮助ExtractNameFromLocation将完全按照它听起来的样子执行-其他人在您的另一个问题中提供了这样做的代码:调用ToList的原因是什么?您只是在重复结果。除了粗心之外?不,我已经更新了我的帖子,谢谢。
string[] Location = {
                        "Theater=2, Name=regal, Area=Area1",
                        "Theater=2, Name=regal, Area=Area1",
                        "Theater=34, Name=Karm, Area=Area4445"
                    };

var test = Location.Select(
                            x => Regex.Match(x, "^.*Name=(.*),.*$")
                                      .Groups[1].Value)
                   .GroupBy(x => x)
                   .Select(x=> new {Name = x.Key, Count = x.Count()});