LINQ 学习路程 -- 查询操作 Distinct Except Intersect Union
2024-09-27 20:12:30
Set Operators | Usage |
---|---|
Distinct | 去掉集合的重复项 |
Except | 返回两个集合的不同,第一个集合的元素不能出现在第二个集合中 |
Intersect | 返回两个集合的交集,即元素同时出现在两个集合中 |
Union | Returns unique elements from two sequences, which means unique elements that appear in either of the two sequences. |
IList<string> strList = new List<string>(){ "One", "Two", "Three", "Two", "Three" }; IList<int> intList = new List<int>(){ , , , , , , , }; var distinctList1 = strList.Distinct(); foreach(var str in distinctList1)
Console.WriteLine(str); var distinctList2 = intList.Distinct(); foreach(var i in distinctList2)
Console.WriteLine(i);
如果要去掉复杂类型的重复项,需要实现IEqualityComparer接口
public class Student
{
public int StudentID { get; set; }
public string StudentName { get; set; }
public int Age { get; set; }
} class StudentComparer : IEqualityComparer<Student>
{
public bool Equals(Student x, Student y)
{
if (x.StudentID == y.StudentID
&& x.StudentName.ToLower() == y.StudentName.ToLower())
return true; return false;
} public int GetHashCode(Student obj)
{
return obj.StudentID.GetHashCode();
}
}
IList<Student> studentList = new List<Student>() {
new Student() { StudentID = , StudentName = "John", Age = } ,
new Student() { StudentID = , StudentName = "Steve", Age = } ,
new Student() { StudentID = , StudentName = "Bill", Age = } ,
new Student() { StudentID = , StudentName = "Bill", Age = } ,
new Student() { StudentID = , StudentName = "Bill", Age = } ,
new Student() { StudentID = , StudentName = "Bill", Age = } ,
new Student() { StudentID = , StudentName = "Ron" , Age = }
}; var distinctStudents = studentList.Distinct(new StudentComparer()); foreach(Student std in distinctStudents)
Except
第一个集合的元素不在第二个集合中出现,返回新的集合
IList<string> strList1 = new List<string>(){"One", "Two", "Three", "Four", "Five" };
IList<string> strList2 = new List<string>(){"Four", "Five", "Six", "Seven", "Eight"}; var result = strList1.Except(strList2); foreach(string str in result)
Console.WriteLine(str);
public class Student
{
public int StudentID { get; set; }
public string StudentName { get; set; }
public int Age { get; set; }
} class StudentComparer : IEqualityComparer<Student>
{
public bool Equals(Student x, Student y)
{
if (x.StudentID == y.StudentID && x.StudentName.ToLower() == y.StudentName.ToLower())
return true; return false;
} public int GetHashCode(Student obj)
{
return obj.StudentID.GetHashCode();
}
}
public class Student
{
public int StudentID { get; set; }
public string StudentName { get; set; }
public int Age { get; set; }
} class StudentComparer : IEqualityComparer<Student>
{
public bool Equals(Student x, Student y)
{
if (x.StudentID == y.StudentID && x.StudentName.ToLower() == y.StudentName.ToLower())
return true; return false;
} public int GetHashCode(Student obj)
{
return obj.StudentID.GetHashCode();
}
}
Intersect
返回两个集合的交集
IList<string> strList1 = new List<string>() { "One", "Two", "Three", "Four", "Five" };
IList<string> strList2 = new List<string>() { "Four", "Five", "Six", "Seven", "Eight"}; var result = strList1.Intersect(strList2); foreach(string str in result)
Console.WriteLine(str);
复杂类型的交集需要实现IEqualityComparer<T>接口
public class Student
{
public int StudentID { get; set; }
public string StudentName { get; set; }
public int Age { get; set; }
} class StudentComparer : IEqualityComparer<Student>
{
public bool Equals(Student x, Student y)
{
if (x.StudentID == y.StudentID &&
x.StudentName.ToLower() == y.StudentName.ToLower())
return true; return false;
} public int GetHashCode(Student obj)
{
return obj.StudentID.GetHashCode();
}
}
IList<Student> studentList1 = new List<Student>() {
new Student() { StudentID = , StudentName = "John", Age = } ,
new Student() { StudentID = , StudentName = "Steve", Age = } ,
new Student() { StudentID = , StudentName = "Bill", Age = } ,
new Student() { StudentID = , StudentName = "Ron" , Age = }
}; IList<Student> studentList2 = new List<Student>() {
new Student() { StudentID = , StudentName = "Bill", Age = } ,
new Student() { StudentID = , StudentName = "Ron" , Age = }
}; var resultedCol = studentList1.Intersect(studentList2, new StudentComparer()); foreach(Student std in resultedCol)
Console.WriteLine(std.StudentName);
Union
两个集合的并集
IList<string> strList1 = new List<string>() { "One", "Two", "three", "Four" };
IList<string> strList2 = new List<string>() { "Two", "THREE", "Four", "Five" }; var result = strList1.Union(strList2); foreach(string str in result)
Console.WriteLine(str);
复杂类型的并集需要实现IEqualityComparer<T>接口
public class Student
{
public int StudentID { get; set; }
public string StudentName { get; set; }
public int Age { get; set; }
} class StudentComparer : IEqualityComparer<Student>
{
public bool Equals(Student x, Student y)
{
if (x.StudentID == y.StudentID && x.StudentName.ToLower() == y.StudentName.ToLower())
return true; return false;
} public int GetHashCode(Student obj)
{
return obj.StudentID.GetHashCode();
}
}
IList<Student> studentList1 = new List<Student>() {
new Student() { StudentID = , StudentName = "John", Age = } ,
new Student() { StudentID = , StudentName = "Steve", Age = } ,
new Student() { StudentID = , StudentName = "Bill", Age = } ,
new Student() { StudentID = , StudentName = "Ron" , Age = }
}; IList<Student> studentList2 = new List<Student>() {
new Student() { StudentID = , StudentName = "Bill", Age = } ,
new Student() { StudentID = , StudentName = "Ron" , Age = }
}; var resultedCol = studentList1.Union(studentList2, new StudentComparer()); foreach(Student std in resultedCol)
Console.WriteLine(std.StudentName);
最新文章
- JavaScript常用技术总结!~~
- HttpClientUtils
- angularjs with node service
- iOS 展示二级页面
- iOS开发融云即时通讯集成详细步骤
- Spring MVC 基础注解之@RequestMapping、@Controller、(二)
- bzoj1015 星球大战
- zendframework 事件管理(二)
- bzoj3994
- No module named BeautifulSoup
- 浅谈PetShop之使用存储过程与PLSQL批量处理(附案例)
- oracle中drop、delete和truncate的区别
- Mysql删除表名中有特殊字符的表
- Java创建对象的4种方式?
- php里面的变量的使用
- 报Error creating bean with name &#39;dataSource&#39; defined in class path resource 报错解决办法
- SVN客户端操作
- 利用SSH上传、下载(使用sz与rz命令)
- 自学Zabbix5.1 zabbix maintenance维护周期
- 移动端h5直播项目|html5直播实战开发|h5仿陌陌