在C#中,Lambda表达式是一种简洁的语法,用于创建匿名函数。当处理包含嵌套列表对象的列表数据时,可以使用LINQ(Language Integrated Query)结合Lambda表达式来进行分组操作。
Lambda表达式:Lambda表达式允许你以简洁的方式定义内联方法。它的基本形式是 (parameters) => expression
或 (parameters) => { statements; }
。
LINQ:LINQ(Language Integrated Query)是一组技术,它将查询功能直接集成到C#语言中。LINQ允许你以声明性方式编写查询,并且可以与各种数据源一起使用。
假设你有一个包含多个订单的列表,每个订单又包含多个订单项。你可能想要按某种方式对这些订单项进行分组,例如按产品ID分组。
以下是一个示例,展示了如何使用Lambda表达式和LINQ对包含嵌套列表对象的列表数据进行分组:
using System;
using System.Collections.Generic;
using System.Linq;
public class OrderItem
{
public int ProductId { get; set; }
public string ProductName { get; set; }
public decimal Price { get; set; }
}
public class Order
{
public int OrderId { get; set; }
public List<OrderItem> Items { get; set; }
}
public class Program
{
public static void Main()
{
List<Order> orders = new List<Order>
{
new Order
{
OrderId = 1,
Items = new List<OrderItem>
{
new OrderItem { ProductId = 1, ProductName = "Product A", Price = 100 },
new OrderItem { ProductId = 2, ProductName = "Product B", Price = 200 }
}
},
new Order
{
OrderId = 2,
Items = new List<OrderItem>
{
new OrderItem { ProductId = 1, ProductName = "Product A", Price = 100 },
new OrderItem { ProductId = 3, ProductName = "Product C", Price = 300 }
}
}
};
var groupedItems = orders.SelectMany(o => o.Items)
.GroupBy(item => item.ProductId)
.Select(group => new
{
ProductId = group.Key,
TotalPrice = group.Sum(item => item.Price),
Count = group.Count()
});
foreach (var group in groupedItems)
{
Console.WriteLine($"Product ID: {group.ProductId}, Total Price: {group.TotalPrice}, Count: {group.Count}");
}
}
}
Order
和 OrderItem
,分别表示订单和订单项。SelectMany
将所有订单的订单项展平成一个单一的序列。GroupBy
按 ProductId
对订单项进行分组。Select
创建一个新的匿名对象,包含每个分组的 ProductId
、总价格和数量。问题:分组后的数据顺序可能与预期不符。
解决方法:可以使用 OrderBy
或 ThenBy
方法对结果进行排序。
var sortedGroupedItems = groupedItems.OrderBy(g => g.ProductId);
通过这种方式,你可以高效地对复杂的数据结构进行分组和处理,同时保持代码的可读性和可维护性。
领取专属 10元无门槛券
手把手带您无忧上云