2016-08-01 4 views
0

у меня есть XML-файл:группа Linq одним несколькими свойствами

<?xml version="1.0" encoding="utf-8" standalone="no"?> 
<Cars> 
    <Car> 
     <Id>1</Id> 
     <Color>Blue</Color> 
     <Price>2000</Price> 
    </Car> 
    <Car> 
     <Id>2</Id> 
     <Color>Blue</Color> 
     <Price>2000</Price> 
    </Car> 
    <Car> 
     <Id>3</Id> 
     <Color>Blue</Color> 
     <Price>3000</Price> 
    </Car> 
    <Car> 
     <Id>4</Id> 
     <Color>Green</Color> 
     <Price>2000</Price> 
    </Car> 
    <Car> 
     <Id>5</Id> 
     <Color>Green</Color> 
     <Price>3000</Price> 
    </Car> 
</Cars> 

и связанный с ним класс:

[XmlRoot(ElementName = "Cars")] 
public class Cars         
{             
    [XmlElement(ElementName = "Car")] 
    public List<Car> Car { get; set; } 
} 

public class Car 
{ 
    public string Id { get; set; } 

    public string Color { get; set; } 

    public string Price { get; set; } 
} 

Я хочу, чтобы сгруппировать машины по цвету и цене и имеют список с групповой результат.

я:

Cars cars = Dezerialise<Cars>(MyXmlFile); 

var group = 
from c in d.Car 
group c by new 
{ 
    c.Color, 
    c.Price, 
} into gcs 
select new Car() 
{ 
    Color = gcs.Key.Color, 
    Price = gcs.Key.Price, 
}; 

Но у меня есть: Result

Я хочу, чтобы в каждом индексе мой результат список соответствующих автомобиля: группа [0] = Список с двумя авто, группа 1 = Список с одного автомобиля и т.д. и т.п.

ответ

0

Кроме того, необходимо спроецировать результат группы как:

var group = 
from c in d.Car 
group c by new 
{ 
    c.Color, 
    c.Price, 
} into gcs 
select new Cars() 
{ 
    Car = gcs.ToList() 
}; 

Это даст вам записи, как:

enter image description here

Использование лямбда-выражений:

var group = d.Car.GroupBy(c=> new 
        { 
        c.Color, 
        c.Price 
        }) 
       .Select(gcs=> new Cars() 
        { 
        Car = gcs.ToList() 
        }); 
+0

вы должны проецировать еще раз, используя для этого SelectMany –

+0

вы означает сингл '' Список ''? Если это так, то почему вы одолжили? –

+0

like: '' var Carrs = group.SelectMany (x => x.Car); '' –

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