2012-07-09 104 views
0

我有这样Linq的分组与列表

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

实体现在我有有重复日期距房间清单产品实体的名单。 Eq。

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; 

任何帮助或想法,请

+0

你期望结果看起来像什么? – 2012-07-09 16:51:36

+0

@RiskyMartin:正如我在问题中提到的,一个属性不会重复。它会显示为一个属性,但其中包含房间列表 – 2012-07-09 16:59:20

+0

因此,即使产品ID不是'propId',您是否想要ID为'propId'的产品与所有产品的房间? – 2012-07-09 17:31:12

回答

0

这个怎么样?

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

product.Rooms = from p in Product 
       from r in p.Rooms 
       select r; 
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”。