需要帮助Linq

时间:2010-10-12 04:13:02

标签: linq

我有一个这样的示例类:

SampleClass
{
    string code;
    int id;
    string name;    
}

该课程的有效数据为:

SampleClass{code= "code1", id= 1, name= "name1"}
SampleClass{code= "code1", id= 1, name= "name2"}
SampleClass{code= "code2", id= 2, name= "name1"}
SampleClass{code= "code2", id= 2, name= "name2"}
SampleClass{code= "code2", id= 2, name= "name3"}

现在的问题是,通过使用LINQ,我需要创建一个在SampleClass“id”字段上分组的TestClass集合。

TestClass结构如下:

TestClass
{
    string code;        
    List<string> names;    
}

其中“names”是按“id”分组的所有SampleClass“name”值的列表。

基于上面的SampleClass示例数据,我将有2个TestClass对象,一个用于id = 1,另一个用于id = 2

提前致谢

3 个答案:

答案 0 :(得分:3)

var result = from c in collection
             group c by c.id into g
             select new TestClass {
                                      code = g.First().code,
                                      names = g.Select(i => i.name).ToList()
                                  };

ps:我现在没有VS,我希望我在那里没有犯很多错误: - )

答案 1 :(得分:3)

好的,如果你有一个名为classes的IEnumerable SampleClasses,试试这个:

        var testClasses = classes
            .GroupBy(c => c.id)
            .Select(grp => new TestClass
            {
                code = grp.First().code,
                names = grp.Select(c => c.name).ToList()
            });

答案 2 :(得分:2)

MSDN有一些很棒的LINQ示例,包括使用分组来完成您的需要。您可以找到一个与您想要的内容类似的示例here