Ganesha
Ganesha

Reputation: 1531

Need help with Linq

I have a sample class like this:

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

Valid data for the class would be:

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"}

Now the question is, by using LINQ, I need to create a TestClass collection grouped on the SampleClass "id" field.

TestClass structure is as follows:

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

where "names" is a list of all SampleClass "name" values grouped by "id".

Based on the above SampleClass sample data, I would have 2 TestClass objects, one for id=1 and other for id=2

Thanks in advance

Upvotes: 1

Views: 72

Answers (3)

zerkms
zerkms

Reputation: 255105

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: I have no VS near now, and I hope I did not make a lot of mistakes there :-)

Upvotes: 3

Alastair Pitts
Alastair Pitts

Reputation: 19601

OK, if you have an IEnumerable of SampleClasses called classes, try this:

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

Upvotes: 3

davisoa
davisoa

Reputation: 5439

MSDN has some great LINQ examples, including using the Grouping to do just what you need. You can find an example doing something similar to what you want here.

Upvotes: 2

Related Questions