2014-01-13 6 views
0

У меня есть следующий классГруппировка Подобные столбцы и конкатенации другие столбцы в LINQ

public class InvoiceRO 
{ 
    public int ID{ get; set; } 

    public string Address { get; set; } 

    public string Reference1 { get; set; } 

    public string DNNumber { get; set; } 

    public string QuotationNumber { get; set; } 

} 

Здесь я есть данные следующим образом

ID Address Reference1 DNNumber QuotationNumber 
---------------------------------------------------------- 
1 add1   ref1  d001  q001 
2 add1   ref1  d001  q002 
3 add1   ref1  d002  q003 

мне нужно только одну строку в качестве вывода, поэтому сначала 2 колонки значения будут равны и получат только один, а последние 2 столбца будут конкатенироваться и извлекаться как значение, разделенное запятыми. Конечным результатом будет

ID Address Reference1 DNNumber  QuotationNumber 
---------------------------------------------------------- 
1 add1   ref1  d001, d002  q001, q002, q003 

Как сгруппироваться в LINQ?

ответ

2

Вы можете использовать GroupBy и затем сцепить строки с String.Join:

invoices.GroupBy(i => new {i.Address, i.Reference1}) 
     .Select(g => new InvoiceRO { 
         ID    = g.First().ID, 
         Address   = g.Key.Address, 
         Reference1  = g.Key.Reference1, 
         DNNumber  = string.Join(", ", g.Select(i => i.DNNumber)), 
         QuotationNumber = string.Join(", ", g.Select(i => i.QuotationNumber)) 
         } 
+0

Большое спасибо другу. Я ожидаю, что это только – Akhil