2012-07-09 146 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」。