Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 用于计算对象属性总和的Linq查询_C#_Linq - Fatal编程技术网

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这超出了这个问题的范围,为了避免把这个答案弄得一团糟,你们最好再问另一个问题。确保显示相关的数据库架构。我会说,您需要使用
内部联接
分组依据
总和