带join和groupby的c#lambda
我有一个lambda表达式,它实际上是有效的带join和groupby的c#lambda,c#,join,lambda,group-by,type-conversion,C#,Join,Lambda,Group By,Type Conversion,我有一个lambda表达式,它实际上是有效的 var d = DateTime.Now.AddDays(-30); return db.Orders .Where(o => o.CreateDate > d) .Join(db.OrderItems, o => o.OrderId, o => o.OrderId, (o, p) => new { Order = o, OrderItem = p }) .Join(db.Customers, o => o.Or
var d = DateTime.Now.AddDays(-30);
return db.Orders
.Where(o => o.CreateDate > d)
.Join(db.OrderItems, o => o.OrderId, o => o.OrderId, (o, p) => new { Order = o, OrderItem = p })
.Join(db.Customers, o => o.Order.CustomerId, o => o.CustomerId, (o, p) => new { o.Order, o.OrderItem, Customer = p })
.Where(o => o.Order.Status > 3)
.GroupBy(o => o.Customer.CustomerId)
.Select(o => new CustomerMonthSale
{
CustomerId = o.Key,
Price = o.Sum(p => p.OrderItem.Price * p.OrderItem.Quantity),
//Name = o.Select(p => p.Customer.Name)
})
.OrderByDescending(o => o.Price)
.Take(10).ToList();
但我对这句话有意见。我收到错误消息:
无法将类型“System.Collections.Generic.IEnumerable”隐式转换为“string”
为什么??如何修复此问题?这是因为您正在选择一个集合,而
Name
正在导出单个字符串。试试这个:
Name = o.Select(p => p.Customer.Name).FirstOrDefault()
因为在之后。选择(…)
您总是会得到一个集合(IEnumerable
),通过调用FirstOrDefault()
您会得到该集合中的第一项