C# 用于计算对象属性总和的Linq查询
我有一个客户列表C# 用于计算对象属性总和的Linq查询,c#,linq,C#,Linq,我有一个客户列表list Customers=new list()使用此格式 class Customer { public string Name; public string City; public Order[] Orders; } class Order { public int Quantity; public Product Product; } class Product { public string Name;
list Customers=new list()代码>使用此格式
class Customer {
public string Name;
public string City;
public Order[] Orders;
}
class Order {
public int Quantity;
public Product Product;
}
class Product {
public string Name;
public decimal Price;
}
每个客户都是这样实例化的:
Customer customer3 = new Customer {
Name = "Kostas",
City = "Athens",
Orders = new Order[] {
new Order {Quantity = 1, Product = new Product {Name = "Juice", Price = 20 } },
},
};
我想写一个LINQ查询,打印出客户的姓名和所有订单的总金额
到目前为止,经过多次尝试,我所做的最接近于此,但它并没有达到预期效果
var query= from c in customers
from p in c.Orders
let summary = p.Product.Price * p.Quantity
select new {c.Name, summary };
使用Select
创建包含订单数量和产品价格之和的匿名对象列表。请注意,这是使用表达式语法而不是查询语法
var query = customers.Select(c => new {
Name = c.Name,
OrderTotal = c.Orders.Sum(o => o.Quantity * o.Product.Price)
});
这将导致一个IEnumerable
,其中T
是一个匿名对象,包含名称和OrderTotal
的道具。您应该改变解决方法
我认为您应该为customer类上的“summary”创建一个属性
像这样
class Customer
{
public string Name;
public string City;
public Order[] Orders;
public int Summary
{
get
{
int result = 0;
foreach(Order order in this.Orders)
{
result += order.Product * order.Quantity;
}
return result;
}
}
}
然后你就可以得到每个代码,很简单
foreach(Customer customer in customers)
{
Console.WriteLine("{0}/{1}", customer.Name, customer.Summary);
}
非常感谢,非常有魅力。为了教育目的,你能不能也写一个类似SQL的版本purposes@John这超出了这个问题的范围,为了避免把这个答案弄得一团糟,你们最好再问另一个问题。确保显示相关的数据库架构。我会说,您需要使用内部联接
,分组依据
和总和
。