2014-06-29 4 views
2

У меня есть список объектов, в которых говорят, что 8 из 9 свойств повторяются часто, когда последнее свойство различно.Linq to Objects: Distinct + Concatenation

Использование C# и LINQ к объектам Я хотел бы, чтобы извлечь (сгруппированных) отчетливый список первых 8 объектов с 9-го имущества каскадного по группе ...

public class MyClass 
{ 
    public int property1 {get;set;} 
    public string property2 {get;set;} 
    public string property3 {get;set;} 
} 

I может иметь список таких как:

var list1 = new List<myClass> 
     { 
      new myClass {property1 = 1, property2 = "foo", property3 = "This"}, 
      new myClass {property1 = 1, property2 = "foo", property3 = "is"}, 
      new myClass {property1 = 1, property2 = "foo", property3 = "a"}, 
      new myClass {property1 = 1, property2 = "foo", property3 = "test"}, 
      new myClass {property1 = 1, property2 = "foo", property3 = "value"}, 
      new myClass {property1 = 2, property2 = "bar", property3 = "Here's"}, 
      new myClass {property1 = 2, property2 = "bar", property3 = "a"}, 
      new myClass {property1 = 2, property2 = "bar", property3 = "second"} 
     }; 

Я изо всех сил, чтобы написать наиболее производительную выражение LINQ, который будет производить следующий перечень объектов:

{ 
    {property1 = 1, property2 = "foo", newProperty3 = "This is a test value"}, 
    {property1 = 2, property2 = "bar", newProperty3 = "Here's a second"} 
}; 

Не могли бы вы помочь?

+0

что ваш не-производительным запрос? – trailmax

+0

До сих пор я пытался разобраться со смесью LINQ и нескольких циклов foreach, но с этим где-то есть проблема. Я пробовал несколько вещей сейчас, но еще не получил весь код, чтобы опубликовать его - слишком много отмены/повтора ... – Drammy

ответ

5

Что вы ищете является GroupBy запрос с составным ключом:

list1.GroupBy(x => new { x.property1, x.property2 }) 
    .Select(g => new 
        { 
         property1 = g.Key.property1, 
         property2 = g.Key.property2, 
         newProperty3 = string.Join(" ", g.Select(x => x.property3)) 
        }); 
+0

У меня был точно такой же ответ :) –

+0

Отлично, спасибо – Drammy

Смежные вопросы