我有以下课程
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将为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
};
这当然没有给出所需的结果,因为这两个属性分别是匿名类型。
有没有办法在Linq中实现这个目标?
答案 0 :(得分: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
};
答案 1 :(得分:0)
我对linq的语法不太确定,但对于lambda,我会使用它。如果您尝试对所有列进行分组,则基本上使用distinct。
Context.Booking.Distinct().Select(z=> new BookingSummaryLine { Group = z.Group, Type = z.Type, Status = z.Status, InvType = (z.InvoiceFrequency + "-" + z.InvoiceLevel });