前言
在C#语言发展的历史长河中,Linq是一个极其重要的里程碑!
Linq的语法吸取了SQL语法的特性,同时配合Lambda表达式又可以使代码更加优雅!
可以这么说,用好了Linq可以大大提高程序猿的工作效率,毕竟我们的日常工作本质就是对数据的处理。经历了十多年的发展,现在微软自带的内库包含的Linq函数已经非常多了,几乎满足我们日常工作。
下面根据一个对科室数据操作的例子,就个人觉得日常高频使用的Linq小技巧贴出来,权当是做个笔记了。
初始化数据
定义模型
这里定义一个科室对象,模拟我们日常工作的科室信息。科室存在层级关系,还有一个员工数量的属性。模型如下:
public class DepartmentDto
{
public int Id { get; set; }
public int? ParentId { get; set; }
public string Name { get; set; }
public string TelPhone { get; set; }
public string Address { get; set; }
public string Remark { get; set; }
public int EmployeeNumber { get; set; }
}
初始化数据
public List<DepartmentDto> InitDepartmentData()
{
List<DepartmentDto> lst = new List<DepartmentDto>();
lst.AddRange(new DepartmentDto[] {
new DepartmentDto() {
Address ="一马路XX号",
Id=1,
Name="一级一号科室",
Remark="",
TelPhone="0731-6111111",
EmployeeNumber=3,
},
new DepartmentDto() {
Address ="二马路XX号",
Id=2,
Name="一级二号科室",
Remark="",
TelPhone="0731-6111111",
EmployeeNumber=4,
},
new DepartmentDto() {
Address ="三马路XX号",
Id=3,
Name="一级三号科室",
Remark="",
TelPhone="0731-6222222",
EmployeeNumber=6,
},
new DepartmentDto() {
Address ="一马路XX号",
ParentId=1,
Id=4,
Name="二级一号科室",
Remark="",
TelPhone="0731-6222222",
EmployeeNumber=7,
},
new DepartmentDto() {
Address ="二马路XX号",
ParentId=2,
Id=5,
Name="二级二号科室",
Remark="",
TelPhone="0731-6222222",
EmployeeNumber=5,
},
});
return lst;
}
获取未存在父级科室的科室集合
List<DepartmentDto> lstDepartItems = InitDepartmentData();
//1、获取未存在父级科室的科室集合 1、2、3
List<DepartmentDto> notExistsParentDepartmentIdLst = lstDepartItems
.Where(p => !p.ParentId.HasValue)
.ToList();
这里比较简单,Where内校验下ParentId的值为空即可,不使用Linq则需要自己手写一个循环搞定,如下:
List<DepartmentDto> notExistsParentDepartmentIdLst_1 = new List<DepartmentDto>();
foreach (DepartmentDto department in lstDepartItems)
{
if (!department.ParentId.HasValue)
notExistsParentDepartmentIdLst_1.Add(department);
}










