3

私は次のクラスを持っています

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; }
}

最後の 2 つのプロパティがグループ化された結果で 1 つの新しいフィールドを形成するように、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 は Daily / Weekly で、InvoiceLevel = Single または Bulk です。

これまでのクエリは次のとおりです。

        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
                        }; 

2 つのプロパティが別々に匿名型にあるため、これは当然、望ましい結果をもたらしません。

Linqでこれを達成する方法はありますか?

4

2 に答える 2

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
    }; 
于 2012-10-22T07:32:04.110 に答える
0

linq の構文についてはよくわかりませんが、ラムダの場合はこれを使用します。そのようなすべての列をグループ化しようとする場合は、基本的にdistinctを使用してください。

Context.Booking.Distinct().Select(z=> new BookingSummaryLine { Group = z.Group, Type =        z.Type, Status = z.Status, InvType = (z.InvoiceFrequency + "-" + z.InvoiceLevel });
于 2012-10-22T07:48:46.307 に答える