【问题标题】:c# lambda with join and groupbyc# lambda 与 join 和 groupby
【发布时间】:2013-12-11 11:45:23
【问题描述】:

我有这个实际工作的 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.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”隐式转换为“字符串”

为什么?我该如何解决这个问题?

【问题讨论】:

    标签: c# join lambda group-by type-conversion


    【解决方案1】:

    这是因为您正在选择一个集合,但 Name 正在显示单个字符串。
    试试这个:

    Name = o.Select(p => p.Customer.Name).FirstOrDefault()
    

    因为在 .Select(..) 之后,您总是会得到一个集合 (IEnumerable),通过调用 FirstOrDefault(),您会得到该集合中的第一个项目

    【讨论】:

      猜你喜欢
      • 2023-03-30
      • 2023-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多