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