LINQ(Language Integrated Query)是集成在 C# 中的查询语言,可简洁地查询集合、数据库等数据源。
public class LinqDemo
{
public static void QueryList()
{
// 数据源:产品列表
List products = new List
{
new Product { Id = 1, Name = "C#教程", Price = 99.9m, Category = "图书" },
new Product { Id = 2, Name = "键盘", Price = 199.9m, Category = "数码" },
new Product { Id = 3, Name = "鼠标", Price = 89.9m, Category = "数码" },
new Product { Id = 4, Name = "Java教程", Price = 89.9m, Category = "图书" },
new Product { Id = 5, Name = "显示器", Price = 1299.9m, Category = "数码" }
};
// 1. 查询所有数码类产品(Where)
var digitalProducts = products.Where(p => p.Category == "数码");
Console.WriteLine("=== 数码类产品 ===");
foreach (var p in digitalProducts)
{
Console.WriteLine($"{p.Name} - {p.Price:C}");
}
// 2. 查询价格低于100元的产品,按价格升序排序(Where + OrderBy)
var cheapProducts = products.Where(p => p.Price < 100).OrderBy(p => p.Price);
Console.WriteLine("\n=== 价格低于100元的产品(升序) ===");
foreach (var p in cheapProducts)
{
Console.WriteLine($"{p.Name} - {p.Price:C}");
}
// 3. 按分类分组(GroupBy)
var groupedByCategory = products.GroupBy(p => p.Category);
Console.WriteLine("\n=== 按分类分组 ===");
foreach (var group in groupedByCategory)
{
Console.WriteLine($"分类:{group.Key}");
foreach (var p in group)
{
Console.WriteLine($" - {p.Name}");
}
}
// 4. 投影(只取名称和价格,匿名类型)
var productInfo = products.Select(p => new { p.Name, p.Price });
Console.WriteLine("\n=== 产品名称和价格 ===");
foreach (var info in productInfo)
{
Console.WriteLine($"{info.Name}:{info.Price:C}");
}
// 5. 统计(Count/Sum/Average)
int totalCount = products.Count();
decimal totalPrice = products.Sum(p => p.Price);
decimal avgPrice = products.Average(p => p.Price);
Console.WriteLine($"\n=== 统计信息 ===");
Console.WriteLine($"产品总数:{totalCount}");
Console.WriteLine($"总价:{totalPrice:C}");
Console.WriteLine($"均价:{avgPrice:C}");
}
}
// 产品实体类
public class Product
{
public int Id { get; set; }
public string Name { get; set; }
public decimal Price { get; set; }
public string Category { get; set; }
}
// 调用示例
LinqDemo.QueryList();