2 LINQ
LINQ是扩展方法(需要引入using System.Linq)
var nums = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
// LINQ Where扩展方法
var res = nums.Where(p => p > 4).ToList();
foreach (var item in res)
{
Console.Write(item + ", ");
}
Console.WriteLine();
// 使用自己写的方法
var res2 = MyWhere(nums, p => p > 5);
foreach (var item in res2)
{
Console.Write(item + ", ");
}
IEnumerable<int> MyWhere(IEnumerable<int> numbers, Func<int, bool> predicate)
{
foreach (var num in numbers)
{
if (predicate(num))
{
// 配合 yield return 提高代码效率
yield return num;
}
}
}
常用扩展方法
class Employee
{
public long Id { get; set; }
public string Name { get; set; }
public int Age { get; set; }
public bool Gender { get; set; }
public int Salary { get; set; }
public override string ToString()
{
return $"Id: {Id}, Name: {Name}, Age: {Age}, Gender: {Gender}, Salary: {Salary}";
}
}
var list = new List<Employee>
{
new() { Id = 1, Name = "jerry", Age = 28, Gender = true, Salary = 5000 },
new() { Id = 2, Name = "jim", Age = 33, Gender = true, Salary = 3000 },
new() { Id = 3, Name = "lily", Age = 35, Gender = false, Salary = 9000 },
new() { Id = 4, Name = "lucy", Age = 16, Gender = false, Salary = 2000 },
new() { Id = 5, Name = "kimi", Age = 25, Gender = true, Salary = 1000 },
new() { Id = 6, Name = "nancy", Age = 35, Gender = false, Salary = 8000 },
new() { Id = 7, Name = "zack", Age = 35, Gender = true, Salary = 8500 },
new() { Id = 8, Name = "jack", Age = 33, Gender = true, Salary = 8000 }
};
// Where 筛选
list.Where(e => e.Age > 30).ToList().ForEach(Console.WriteLine);
// Count 获取数量
Console.WriteLine("Count: " + list.Count(e => e.Age > 30));
// Any
Console.WriteLine("Any: " + list.Any(e => e.Salary > 5000));
// Single/SingleOrDefault
// First/FirstOrDefault
Console.WriteLine("Single: " + list.Single(p => p.Id == 1));
// OrderBy/OrderByDescending
_ = list.OrderBy(p => p.Age);
// 取部分数据, Skip(), Take()
_ = list.Skip(5).Take(2);
// 聚合函数, Sum, Min, Max, Count, Average
_ = list.Where(p => p.Age > 30).Average(p => p.Salary);
// 分组 GroupBy
var groups = list.GroupBy(p => p.Age);
foreach (var group in groups)
{
Console.WriteLine(group.Key);
foreach (var item in group)
{
Console.WriteLine(item);
}
Console.WriteLine("----------");
}
// 投影 Select
var items = list.Select(p => p.Age);
// 匿名类型
var An = new
{
Id = 1,
Name = "jerry",
};
Console.WriteLine(An.Id);
// 链式调用
_ = list.Where(p => p.Id > 2).GroupBy(p => p.Age).OrderBy(p => p.Key).Take(3).Select(p => new
{
Age = p.Key,
Count = p.Count(),
AvgSalary = p.Average(q => q.Salary)
});
No Comments