2012-10-22 149 views
3

兩個屬性作爲一個我有下面的類集團通過LINQ的

public class Booking 
{ 
    public string Group { get; set; } 
    public BookingType Type { get; set; } 
    public BookingStatus Status { get; set; } 
    public InvoiceFreq { get; set; } 
    public InvoiceLevel { get; set; } 
} 

,我會需要將它們按Linq中的所有屬性,以便最後兩個屬性中的分組的結果形成一個新的領域。 像這樣:

 Group Type Status  InvoiceType   
     ------------------------------------------- 
     Group1 Online New   Daily-Single 
     Group2 Phone Accepted Daily-Single 
     Group3 Store Accepted Weekly-Single 
     Group3 Store Accepted Weekly-Bulk 

這裏InvoiceFreq將每日/每週與InvoiceLevel =單一或批量。

查詢我到目前爲止是這樣的:

 var query = from b in Bookings 
         group b by new 
         { 
          b.Group, 
          b.Type, 
          b.Status, 
          b.InvoicingFrequency, 
          b.InvoicingLevel 
         } into bookingGroup 
         select new BookingSummaryLine() 
         { 
          Group = bookingGroup.Key.UserGroup, 
          Type = bookingGroup.Key.UserGroup, 
          Status = bookingGroup.Key.FinancialStatus, 
          InvType = String.Format({0}-{1},bookingGroup.Key.InvoicingFrequency, bookingGroup.Key.InvoicingLevel 
         }; 

當然,這並不能給期望的結果是這兩個屬性是匿名類型分開。

在Linq中有什麼辦法可以實現這個嗎?

回答

4

這應該工作:

var query = from b in Bookings 
    group b by new 
    { 
     b.Group, 
     b.Type, 
     b.Status, 
     InvType = String.Format({0}-{1},b.InvoicingFrequency, b.InvoicingLevel) 
    } into bookingGroup 
    select new BookingSummaryLine() 
    { 
     Group = bookingGroup.Key.UserGroup, 
     Type = bookingGroup.Key.UserGroup, 
     Status = bookingGroup.Key.FinancialStatus, 
     InvType = bookingGroup.Key.InvType 
    }; 
+0

嗯,我很接近...... :) – akrobet

0

我不是肯定的語法的LINQ但對於拉姆達我會用這個。基本上使用不同的,如果你想在這樣的所有列上分組。

Context.Booking.Distinct().Select(z=> new BookingSummaryLine { Group = z.Group, Type =  z.Type, Status = z.Status, InvType = (z.InvoiceFrequency + "-" + z.InvoiceLevel });