Linq分组列表

时间:2012-07-09 15:57:47

标签: c# .net linq .net-4.0 grouping

我有这样的实体

Product                           Room
long productid                    long roomid
List<Room> rooms                  string roomname
String name  

现在我有一个产品实体列表,除了房间列表之外还有重复的日期。 当量

Product                                
Id 1                        Id2                    Id3
Rooms = 1,A                 Rooms = 1,B            Rooms =1,C
ABC                         ABC                    ABC

在这种情况下,我有相同的属性重复3次,因为它有3个房间。

我要做的是将所有房间添加到一个产品实体,该实体将具有一个产品实体和房间列表(在这种情况下为3个列表)。 我试过这样的东西,但它不起作用。

这里我传递了属性id

var result = from t in Product
             where t.ProductId == propId
             group t by t.Rooms
             into g
             select g;

请提供任何帮助或想法

2 个答案:

答案 0 :(得分:0)

这个怎么样?

var product = Product.First(p => p.ProductId == propId);

product.Rooms = from p in Product
                from r in p.Rooms
                select r;

答案 1 :(得分:0)

如果您只需要获取与任何产品相关的房间列表,您可以试试这个:

var query = from t in products
            select t;
var rooms = query.Aggregate(new List<Room> { }.AsEnumerable(), (i, p) => i.Union(p.rooms));

请注意,聚合不会作为sql查询执行(如果要从数据库中提取数据) - 相反,它将在内存中执行。

我不确定这是否是您想要的结果,但它会为您提供所有产品组合的“房间”属性中的房间列表。例如,如果您有一个产品的房间为“A”和“B”,另一个产品的房间为“C”,则产​​生的房间列表将包含“A”,“B”和“C”。