2016-08-02 2 views
1

У меня есть XML-файл:Linq GroupBy - Выберите новый список

<?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> 
</Cars> 

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

public class Cars 
{ 
    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 Cars() 
{ 
    Car = gcs.ToList() 
}; 

Но как выбрать непосредственно новый список вместо новых машин()?

Thx

+0

ли вы имеете в виду анонимный список, который содержит цвет, цену и список автомобилей? –

+0

Какой требуемый выход. пример будет приятным –

ответ

1

Вы можете просто использовать анонимный тип без создания istance класса Автомобили и он должен работать нормально.

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

После запроса вы будете иметь автомобили в группе, которые вы можете Foreach так:

foreach (var group in groups) 
     { 
      foreach (var car in group.Cars) 
      { 
       Console.WriteLine(car.Color); 
      } 
     } 
Смежные вопросы