GroupBy分组后,如何获取值?

se344 2015-09-01 11:23:36

class Program
{
static void Main(string[] args)
{
List<Person> ListP = new List<Person>()
{
new Person(){Age = 10,Name = "张三"},
new Person(){Age = 10,Name = "李四"},
new Person(){Age = 20,Name = "王二"},
new Person(){Age = 20,Name = "麻子"},
};
var ccc = ListP.GroupBy(x => x.Age);
}
}
public class Person
{
public int Age;
public string Name;
}

上面的代码,按照Age,对ListP进行分组,我想问的是:
通过ccc,如果获取到年龄是10的那个分组的两个Person对象,就是"张三"和"李四"那两个..............
...全文
1904 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
bdmh 2015-09-01
  • 打赏
  • 举报
回复
或者
ccc.Where(v => v.Key == 10);
bdmh 2015-09-01
  • 打赏
  • 举报
回复

            foreach (var v in ccc)
            {
                if (v.Key == 10)
                {
                    MessageBox.Show("ok");
                }
            }
  • 打赏
  • 举报
回复
var ccc = ListP.GroupBy(x => x.Age);
foreach(var g in ccc)
{
  var key = g.Key,
  var arr = g.ToArray();
}
Forty2 2015-09-01
  • 打赏
  • 举报
回复
foreach(var group in ccc) { foreach(var person in group) { } }
ajianchina 2015-09-01
  • 打赏
  • 举报
回复
引用 7 楼 以专业开发人员为伍的回复:
其实,我更喜欢“傻瓜化的” 类sql的写法。我觉得许多时候能把代码写得傻瓜都懂,这才是真正的聪明。 这个查询可以写成类似 sql 的写法
static void Main(string[] args)
{
    List<Person> ListP = new List<Person>()
    {
        new Person(){Age = 10,Name = "张三"},
        new Person(){Age = 10,Name = "李四"},
        new Person(){Age = 20,Name = "王二"},
        new Person(){Age = 20,Name = "麻子"},
    };
    var ccc = from x in ListP
                group x by x.Age into g
                where g.Key == 10
                from p in g
                select p;
    foreach (var item in ccc)
    {
        Console.WriteLine("{0},{1}", item.Age, item.Name);
    }
}
}

public class Person
{
public int Age;
public string Name;
}
这就是聪明的 Linq。而函数式的 Linq 写法只在必要时、可以少用为妙。
记得你上次在关于语法糖的帖子里还对语法糖加以推崇,那么这里前面用lambda表达式了,你咋又不推荐语法糖了呢?
  • 打赏
  • 举报
回复
其实,我更喜欢“傻瓜化的” 类sql的写法。我觉得许多时候能把代码写得傻瓜都懂,这才是真正的聪明。 这个查询可以写成类似 sql 的写法
static void Main(string[] args)
{
    List<Person> ListP = new List<Person>()
    {
        new Person(){Age = 10,Name = "张三"},
        new Person(){Age = 10,Name = "李四"},
        new Person(){Age = 20,Name = "王二"},
        new Person(){Age = 20,Name = "麻子"},
    };
    var ccc = from x in ListP
                group x by x.Age into g
                where g.Key == 10
                from p in g
                select p;
    foreach (var item in ccc)
    {
        Console.WriteLine("{0},{1}", item.Age, item.Name);
    }
}
}

public class Person
{
public int Age;
public string Name;
}
这就是聪明的 Linq。而函数式的 Linq 写法只在必要时、可以少用为妙。
  • 打赏
  • 举报
回复
借用楼上的代码,可以写为
static void Main(string[] args)
{
    List<Person> ListP = new List<Person>()
    {
        new Person(){Age = 10,Name = "张三"},
        new Person(){Age = 10,Name = "李四"},
        new Person(){Age = 20,Name = "王二"},
        new Person(){Age = 20,Name = "麻子"},
    };
    var ccc = ListP.GroupBy(x => x.Age).Where(x => x.Key == 10).SelectMany(x => x);
    foreach (var item in ccc)
    {
        Console.WriteLine("{0},{1}", item.Age, item.Name);
    }
}
}

public class Person
{
public int Age;
public string Name;
}
你可以调试一下 ccc 变量的类型,它就是 Person 的列表。
全栈极简 2015-09-01
  • 打赏
  • 举报
回复
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
List<Person> ListP = new List<Person>()
{
new Person(){Age = 10,Name = "张三"},
new Person(){Age = 10,Name = "李四"},
new Person(){Age = 20,Name = "王二"},
new Person(){Age = 20,Name = "麻子"},
};
var ccc = ListP.GroupBy(x => x.Age).ToArray();
var persons = ccc.FirstOrDefault(x => x.Key == 10).ToArray();
foreach (var item in persons)
{
Console.WriteLine("{0},{1}", item.Age, item.Name);
}
}
}

public class Person
{
public int Age;
public string Name;
}
}


110,537

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧