我有一个使用此格式的客户List<Customer> customers = new List<Customer>();
列表
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 };
答案 0 :(得分:2)
使用@RequestMapping(method=RequestMethod.GET, value="/userss")
public @ResponseBody String getUserName(@RequestParam String userName) {
return userName;
}
创建一个包含订单数量和产品价格Select
的匿名对象列表。请注意,这是使用表达式语法而不是查询语法。
Sum
这将产生var query = customers.Select(c => new {
Name = c.Name,
OrderTotal = c.Orders.Sum(o => o.Quantity * o.Product.Price)
});
,其中IEnumerable<T>
是一个匿名对象,其中包含T
和Name
的道具。
答案 1 :(得分:0)
你应该改变解决方法。
我认为你应该在客户类
上为'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代码,只需
foreach(Customer customer in customers)
{
Console.WriteLine("{0}/{1}", customer.Name, customer.Summary);
}