2012-07-02 183 views
1

列表想象有一個類(和相應的數據庫表)如下LINQ選擇列表與DISTINCT

class Price{ 
    int ItemID; 
    int ItemTypeID; 
    string ItemName; 
    string ItemTypeName; 
    float Price; 
} 

我seraching新通過LINQ查詢它以獲得不同的列表項目(可能使用Take()和Skip()方法)並嵌套所有關聯價格的列表。

有什麼建議嗎?

編輯:爲了使問題更簡單這裏有一個例子

試想一下,有3個「價格」爲以下

1, 1, Ball, Blue, 10 
1, 2, Ball, Red, 20 
2, 1, Frisbee, Blue, 30 

我想將它們放在一個簡化的結構

List<Item>

其中

class Item 
{ 
    string ItemName; 
    string ItemTypeName; 
    List<Price> Prices; 
} 

class Price 
{ 
    float Price; 
} 
+2

.Distinct()LINQ的運營商... –

回答

5

這聽起來像也許你想要一個GroupBy。嘗試這樣的事情。

var result = dbContext.Prices 
    .GroupBy(p => new {p.ItemName, p.ItemTypeName) 
    .Select(g => new Item 
        { 
         ItemName = g.Key.ItemName, 
         ItemTypeName = g.Key.ItemTypeName, 
         Prices = g.Select(p => new Price 
                { 
                 Price = p.Price 
                } 
              ).ToList() 

        }) 
    .Skip(x) 
    .Take(y) 
    .ToList(); 
5

使用Distinct(),像這樣:

var results = _dbContext.Prices 
    .Distinct() 
    .Skip(15) 
    .Take(5); 

編輯: 要使用價格對每個項目的列表填充List<Item>爲你問你應該使用GROUPBY像這個:

var results = _dbContext.GroupBy(i => new { i.ItemName, i.ItemTypeName }) 
    .Select(g => new Item() 
     { 
      ItemName = g.Key.ItemName, 
      ItemTypeName = g.Key.ItemTypeName, 
      Prices = g.Select(p => new Price(){Price = p.Price}) 
     }); 

之後,您可以按照與第一個查詢中相同的方式應用TakeSkip

+2

這是[第一件事情(http://msdn.microsoft.com/en-us/library/system.linq.enumerable.distinct.aspx)當搜索「不同的linq」時,它出現在Google搜索中。 –

+0

這將給出價格清單。我會更新問題以使其更清晰 – Mauro

+1

'.Take(5).Skip(15)'將始終導致一個空的枚舉。我知道這只是一個樣本,但我想我會指出它來消除混淆。爲了清楚起見,我將兩個電話交換。 –