Linq GroupBy - 选择新列表

时间:2016-08-02 12:31:10

标签: c# linq group-by

我有一个XML文件:

<?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()
};

但是如何直接选择新的List而不是新的Cars()?

THX

1 个答案:

答案 0 :(得分:1)

您可以使用匿名类型而无需创建Cars类的等级,它应该可以正常工作。

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

在查询之后,您将把汽车分组,您可以这样预告:

foreach (var group in groups)
        {
            foreach (var car in group.Cars)
            {
                Console.WriteLine(car.Color);
            }
        }