Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将两个属性分组为Linq中的一个属性_C#_Linq - Fatal编程技术网

C# 将两个属性分组为Linq中的一个属性

C# 将两个属性分组为Linq中的一个属性,c#,linq,C#,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中的所有属性对

我有以下课程

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中有什么方法可以实现这一点吗?

这应该可以:

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

我不太确定linq的语法,但是对于lambda,我会使用这个。如果您试图对所有列进行分组,基本上使用distinct

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