Linq查询计算对象属性的总和

时间:2015-09-25 16:56:24

标签: c# linq

我有一个使用此格式的客户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 };

2 个答案:

答案 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>是一个匿名对象,其中包含TName的道具。

答案 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);
        }