首页 / 问答 / C#&.NET, .NET Core程序中如何使用Linq实现综合类似SQL的LEFT JOIN,SUM和GROUP BY查询语句呢?

C#&.NET, .NET Core程序中如何使用Linq实现综合类似SQL的LEFT JOIN,SUM和GROUP BY查询语句呢?

.NET C# GROUP BY Linq SQL .NET Core 1.13K 次浏览
0

在C#&.NET, .NET Core的程序编程开发中,如何使用Linq实现综合使用类似SQL的LEFT JOIN,SUM和GROUP BY查询语句呢?

比如在订单管理系统或电子商务平台中用于表示订单信息的Order类和产品信息的Product类。订单信息类Order包含了订单的基本信息,包括订单编号OrderId、产品编号ProductId、数量Quantity和产品对象Product。订单类用于记录用户购买商品的订单信息,订单对象中包含的产品编号可以和产品信息类 Product 进行关联。

产品信息类Product包含了产品的基本信息,包括产品编号ProductId、名称Name和价格Price。产品信息类用于记录产品的基本信息,如名称、价格等,这些信息将在订单中使用。

现在有订单类和产品类如下:

// 订单信息类
public class Order {
    public int OrderId { get; set; }
    public int ProductId { get; set; }
    public int Quantity { get; set; }
    public Product Product { get; set; }
}

// 产品信息类
public class Product {
    public int ProductId { get; set; }
    public string Name { get; set; }
    public decimal Price { get; set; }
}

示例数据如下:

// 创建一个包含订单信息的集合
List<Order> orders = new List<Order>
{
    new Order { OrderId = 1, ProductId = 1, Quantity = 2 },
    new Order { OrderId = 2, ProductId = 2, Quantity = 1 },
    new Order { OrderId = 3, ProductId = 1, Quantity = 3 },
    new Order { OrderId = 4, ProductId = 3, Quantity = 2 },
    new Order { OrderId = 5, ProductId = 2, Quantity = 1 },
    new Order { OrderId = 6, ProductId = 1, Quantity = 4 }
};

// 创建一个包含产品信息的集合
List<Product> products = new List<Product>
{
    new Product { ProductId = 1, Name = "iPhone X", Price = 7999 },
    new Product { ProductId = 2, Name = "iPad Pro", Price = 5999 },
    new Product { ProductId = 3, Name = "Apple Watch", Price = 2999 },
    new Product { ProductId = 4, Name = "Macbook Pro", Price = 12999 }
};

要求在C#&.NET Core程序中,使用Linq的LEFT JOIN,GROUP BY以及SUM等按产品名称分组查询出每个产品的总销售数量及总销售金额。

期望结果如下:

| 产品名称     | 订单总量      | 销售总额     |
|-------------|-------------|-------------|
| iPhone X    | 9           | 71991       |
| iPad Pro    | 2           | 11998       |
| Apple Watch | 2           | 5998        |
回复 [×]
提交评论
请输入评论内容

1 个回答

  • 0

    以下是一个在C#&.NET Core(.NET 7)程序中使用Linq(LEFT JOIN,GROUP BY,SUM)实现产品销售情况统计的完整示例:

    运行结果:

    以上LINQ查询的目的是查询每个产品的订单总量和销售总额。

    为了实现这一点,首先使用了一个左外连接(Left Join)将订单信息集合(orders)和产品信息集合(products)连接在一起,然后使用group by按照产品名称(Name)进行分组,并使用Sum函数分别计算订单总量(TotalQuantity)和销售总额(TotalSales)。

    因为使用了Left Join,即使某些产品没有订单也能出现在结果中,同时也可以计算出没有产品信息的订单的销售额。最终的结果集包括产品名称(Name)、订单总量(TotalQuantity)和销售总额(TotalSales)这三个字段。

    考虑到存在一些订单没有产品信息,因此我们使用了DefaultIfEmpty函数来将每个订单和一个空的产品信息进行匹配。同时,在结果集中使用了空值条件运算符(?.),以便在没有匹配到产品信息时不会引发异常。

    注意,C# Linq查询中的变量名和类属性名与SQL查询中的表名和字段名可能不完全相同。

    Rector的个人主页

    Rector

    2023-02-25 回答

    我来回答