方法汇总
方法名 | 作用 |
Select | 用于直接查询集合中的元素 |
Where | 用于条件查询集合中的元素 |
OfType | 用于查询集合中指定类型的元素 |
Join | 用于对两个集合中的元素进行合并 |
OrderBy | 用于排序集合顺序 |
Reverse | 用于反转集合顺序 |
GroupBy | 用于分组查询集合中的元素 |
Any | 用于判断集合中任一元素是否满足条件 |
All | 用于判断集合中所有元素是否满足条件 |
Skip | 用于跳过位置查询集合中的元素 |
Take | 用于限定位置查询集合中的元素 |
Sum | 用于计算集合中的总和 |
Average | 用于计算集合中的平均值 |
Max | 用于计算集合中的最大值 |
Min | 用于计算集合中的最小值 |
Concat | 用于合并两个相同类型的集合 |
Distinct | 用于去除集合中重复的元素 |
Count | 用于得到集合中满足条件的元素个数 |
First | 用于得到集合中满足条件的首部元素 |
Last | 用于得到集合中满足条件的尾部元素 |
ToDictionary | 用于将集合转换为字典 |
ToList | 用于将集合转换为List |
SequenceEqual | 用于判断两个集合是否相等 |
示例所使用的类对象
class Person
{
public int id;
public string name;
public int age;
public int score;
//重写ToString方法用于快速得到Person中的所有信息
public override string ToString() => id + "," + name + "," + age + "," + score;
}
class Reward
{
public int id;
public int score;
public string rewardName;
//重写ToString方法用于快速得到Reward中的所有信息
public override string ToString() => id + "," + score + "," + rewardName;
}
Select的使用
private void Select()
{
List<Person> PersonList = new()
{
new Person(){id=1,name="小明",age=20,score=100},
new Person(){id=2,name="小王",age=40,score=80},
new Person(){id=3,name="小刘",age=60,score=60},
};
//获取PersonList中所有的name元素
var List1 = PersonList.Select(p => p.name);
//获取PersonList中所有的id和name元素
var List2 = PersonList.Select(p => new { id = p.id, name = p.name });
foreach (var item in List1)
print(item);
foreach (var item in List2)
print(item);
}
Where的使用
private void Where()
{
List<Person> PersonList = new()
{
new Person(){id=1,name="小明",age=20,score=100},
new Person(){id=2,name="小王",age=40,score=80},
new Person(){id=3,name="小刘",age=60,score=60},
};
//得到PersonList中,score>=80 且 age<50 的元素
var List = PersonList.Where(pList => pList.score >= 80 && pList.age < 50);
foreach (var item in List)
print(item);
}
OfType的使用
private void OfType()
{
List<object> objList = new()
{
"test1",
1,
1.34f,
"test2",
};
//得到objList中所有变量类型为string的元素
var List = objList.OfType<string>();
foreach (var item in List)
{
print(item);
}
}
Join的使用
private void Join()
{
List<Person> PersonList = new()
{
new Person() { id=1, name="小明", age=20, score=100 },
new Person() { id=2, name="小王", age=40, score=80 },
new Person() { id=3, name="小刘", age=60, score=60 },
};
List<Reward> RewardList = new()
{
new Reward() { id = 1, score = 100, rewardName = "奖励1" },
new Reward() { id = 2, score = 80, rewardName = "奖励2" },
new Reward() { id = 3, score = 60, rewardName = "奖励3" },
};
//通过键值score,合并PersonList 和 RewardList
var List = PersonList.Join(RewardList,
p => p.score,
r => r.score,
(p, r) => new { pList = p, rList = r }
);
foreach (var item in List)
{
print(item);
}
}
OrderBy的使用
private void OrderBy()
{
List<Person> PersonList = new()
{
new Person() { id=1, name="小明", age=20, score=100 },
new Person() { id=2, name="小王", age=40, score=80 },
new Person() { id=3, name="小刘", age=60, score=60 },
};
//默认是从小到大排序:先根据age排序,再根据score排序
var List = PersonList.OrderBy((p) => p.age).ThenBy((p) => p.score);
foreach (var item in List)
{
print(item);
}
}
Reverse的使用
private void Reverse()
{
List<Person> PersonList = new()
{
new Person() { id=1, name="小明", age=20, score=100 },
new Person() { id=2, name="小王", age=40, score=80 },
new Person() { id=3, name="小刘", age=60, score=60 },
};
//反转集合中的元素顺序
var list = PersonList.AsEnumerable().Reverse();
foreach (var item in list)
{
print(item);
}
}
Any和All的使用
private void Any_All()
{
List<Person> PersonList = new()
{
new Person() { id=1, name="小明", age=20, score=100 },
new Person() { id=2, name="小王", age=40, score=80 },
new Person() { id=3, name="小刘", age=60, score=60 },
};
//PersonList中,是否存在小于50的age
bool b1 = PersonList.Any(p => p.age < 50);
//PersonList中,是否所有的age都小于50
bool b2 = PersonList.All(p => p.age < 50);
print(b1);
print(b2);
}
Skip的使用
private void Skip()
{
List<Person> PersonList = new()
{
new Person() { id=2, name="小王", age=40, score=80 },
new Person() { id=3, name="小刘", age=60, score=60 },
new Person() { id=1, name="小明", age=20, score=100 },
};
//跳过前2个元素,得到剩下的元素
var List = PersonList.Skip(2);
foreach (var item in List)
{
print(item);
}
}
Take的使用
private void Take()
{
List<Person> PersonList = new()
{
new Person() { id=1, name="小明", age=20, score=100 },
new Person() { id=2, name="小王", age=40, score=80 },
new Person() { id=3, name="小刘", age=60, score=60 },
};
//只得到前2个元素,抛弃剩下的元素
var List = PersonList.Take(2);
foreach (var item in List)
{
print(item);
}
}
Sum、Average、Max、Min的使用
private void Sum_Average_Max_Min()
{
List<Person> PersonList = new()
{
new Person() { id=1, name="小明", age=20, score=100 },
new Person() { id=2, name="小王", age=40, score=80 },
new Person() { id=3, name="小刘", age=60, score=60 },
};
//得到集合中所有age的总和、平均值、最大值、最小值
var sum = PersonList.Sum((p) => p.age);
var avg = PersonList.Average((p) => p.age);
var max = PersonList.Max((p) => p.age);
var min = PersonList.Min((p) => p.age);
print(sum);
print(avg);
print(max);
print(min);
}
Concat的使用
private void Concat()
{
List<int> numList1 = new List<int>() { 1, 2, 3 };
List<int> numList2 = new List<int>() { 4, 5, 6 };
//将两个相同类型的集合,合并成为一个集合
var List = numList1.Concat(numList2);
foreach (var item in List)
{
print(item);
}
}
Distinct的使用
private void Distinct()
{
List<int> numList = new() { 1, 2, 3, 1, 2, 3 };
List<Person> PersonList = new()
{
new Person() { id=1, name="小明", age=20, score=100 },
new Person() { id=2, name="小王", age=40, score=80 },
new Person() { id=3, name="小刘", age=60, score=60 },
new Person() { id=3, name="小刘", age=60, score=60 },
};
//去除重复集合元素
var List1 = numList.Distinct();
foreach (var item in List1)
{
print(item);
}
}
Count的使用
private void Count()
{
List<int> List = new() { 1, 2, 3 };
//得到List中,满足大于等于2的元素个数
var count = List.Count(n => n >= 2);
print(count);
}
First和Last的使用
private void First_Last()
{
List<int> List = new() { 1, 2, 3 };
//得到List中,满足条件大于等于2的,第一个元素
var value1 = List.First(n => n >= 2);
//得到List中,满足条件小于3时,最后一个元素
var value2 = List.Last(n => n < 3);
print(value1);
print(value2);
}
ToDictionary和ToList的使用
private void ToDictionary_ToList()
{
List<Person> PersonList = new()
{
new Person() { id=1, name="小明", age=20, score=100 },
new Person() { id=2, name="小王", age=40, score=80 },
new Person() { id=3, name="小刘", age=60, score=60 },
};
//以id为字典的键值,将PersonList转化为字典
var Dictionary = PersonList.ToDictionary(p => p.id);
foreach (var item in Dictionary)
{
print("字典中的值: " + item);
}
//将字典中的值转化为List
List<Person> List = Dictionary.Values.ToList();
foreach (var item in List)
{
print("列表中的值: " + item);
}
}
SequenceEqual的使用
private void SequenceEqual()
{
List<int> List1 = new() { 1, 2, 3 };
List<int> List2 = new() { 3, 1, 2 };
//对List1和List2进行从小到大排序
List1 = List1.OrderBy(temp => temp).ToList();
List2 = List2.OrderBy(temp => temp).ToList();
//判断List1和List2是否相等
print(List1.SequenceEqual(List2));
}
代码文件
参考文档
C#中的LINQ_c# linq_Hello Bug.的博客-CSDN博客
C# 中的语言集成查询 (LINQ) | Microsoft Learn