2014-02-17 62 views
1

我有一個記錄列表,其中一些具有相同的記錄ID。我想按照該記錄ID進行分組,並將其餘的屬性設置爲列表和一些字符串。這是我希望創建的對象:Group通過一個屬性,製作一個重複的列表

public class Product { 
    public string Id{ get; set; } 
    public List<string> Package { get; set; } 
    public string ShortDescription { get; set; } 
} 

而且我要來處理這樣的記錄:

list_Of_Records = [ { id: 123, Package: ABC, ShortDescription: Description }, 
        { id: 123, Package: ZXY, ShortDescription: Description }, 
        { id: 123, Package: MLO, ShortDescription: Description }, 
        { id: 456, Package: ABC, ShortDescription: DescriptionTwo }, 
        { id: 456, Package: ZXY, ShortDescription: DescriptionTwo }, 
        { id: 456, Package: MLO, ShortDescription: DescriptionTwo }, 
] 

而且我倒是喜歡這個樣子:

list_Of_Records_Organized = [ 
     { Id: 123, Package: [ABC, ZXY, MLO], ShortDescription: Description }, 
     { Id: 456, Package: [ABC, ZXY, MLO], ShortDescription: DescriptionTwo } 
] 

對於每個ID,描述總是相同的,所以我可以選擇其中的任何一個。問題是那些軟件包!

希望我很清楚。

回答

3

嘗試這樣:

var list_Of_Records_Organized = 
    from r in list_Of_Records 
    group r by r.Id into g 
    select new Product { 
     Id = g.Key, 
     Package = g.Select(r => r.Package).ToList(), 
     ShortDescription = g.First().ShortDescription 
    }; 

或者在lambda語法:

var list_Of_Records_Organized = list_Of_Records.GroupBy(
    r => r.Id, 
    (k, g) => new Product { 
     Id = k, 
     Package = g.Select(r => r.Package).ToList(), 
     ShortDescription = g.First().ShortDescription 
    }); 
+0

謝謝!這工作!必須將SelectMany更改爲Select,並添加ToList,但完美地工作。 –

+0

@fede_rosario對不起,我誤解了。我認爲'r.Package'是一個'List '。我已經相應地更新了答案。 –

+0

是的,我也是這樣做的。如果想法是使用列表,然後是具有分組包值的新列表,那麼包必須是列表,並且需要SelectMany。我寫了同樣的查詢,但沒有發佈點,因爲這個答案完美地處理它。 –

3
organizedList = list_of_records 
       .GroupBy(m => m.id) 
       .Select(m => new { 
        Id = m.Key, 
        Package = m.SelectMany(x => x.Package).ToArray(), 
        ShortDescription = m.First().ShortDescription 
       }); 

但這意味着你將採取任意SHORTDESCRIPTION(第一每組中發現的)。

順便說一句,您的示例不清楚。

是打包一個字符串還是一個字符串列表?在你的課堂上,這是一個List<string>,但在你的例子中,它看起來像一個字符串。

如果它是一個字符串,請使用選擇,而不是在的SelectMany

Package = m.Select(x => x.Package).ToArray(), 
+0

是的,它的名單,對此感到抱歉。兩個答案都起作用,標誌着我首先嚐試的那個。 –

相關問題