语言集成查询(LINQ)是一种功能强大的查询语言。
.Where()方法用于从集合中筛选出符合条件的元素
.Select()方法用于从集合中选择特定的属性或计算新的值。这个方法非常常用,特别是在处理集合数据时。
var Recruits = recruits
.Where(r => r.IsEnabled==1)
.Select(r => new
{
r.Id,
r.CreateDate,
r.Title
})
.ToList();
在Where()方法中,使用lambda表达式筛选出IsEnable=1的数据。
然后再通过Select方法,只选择其中的部分属性,这样查询出来的对象就只有这些属性。
.OrderBy()方法根据指定的字段按升序对集合中的元素进行排序。
.OrderByDescending()方法根据指定的字段按降序对集合中的元素进行排序。
var Recruits = recruits.Where(r => r.IsEnabled==1)
.OrderBy(x=>x.CreateDate).ToList();
var Recruits = recruits.Where(r => r.IsEnabled==1)
.OrderByDescending(x=>x.CreateDate).ToList();
.ThenBy()方法按指定字段升序二次排序
.ThenByDescending()方法按指定字段降序二次排序
var Recruits = recruits.Where(r => r.IsEnabled==1)
.OrderBy(x=>x.CreateDate)
.ThenBy(x=>x.ModifyDate)
.ToList();
.All()方法用于确认序列的所有元素是否满足条件,返回的是一个布尔值
bool Recruits = recruits.All(r => r.IsEnabled==1).ToList();
.Any()方法用于判断该序列是否有元素,返回的是布尔值,若有则为true,反之false
.Append()方法用于追加元素到序列末尾
.Concat()方法用于连接两个序列
var AB=A.Select(a=>a.Name).Concat(b.Select(b=>b.Name)).ToList();
.Contains()方法用于确定序列是否包含指定的元素
//Contains(元素,序列)
Object[] obj = {A,B,C,D};
Object B={}
Object[] objA = { new Object{ Name = "a"},
new Object{ Name = "b"},
new Object { Name = "c"} };
Object a = new Object { Name = "a"};
Object d = new Object { Name = "d"};
ObjectCompare objB= new ObjectCompare ();
bool hasa = objA .Contains(a, objB);//true
bool hasd = objA .Contains(d, objB);//false
.Count()方法返回该序列的数量
int count=A.Select(a=>a.Name).Count();
.DefaultIfEmpty()方法用于返回序列的元素,如果序列为空,则返回默认值
Num defaultNum = new Pet { Name = "0"};
List<Num> nums1= new List{ new Num{ Name="1"},
new Num{ Name="2"},
new Num{ Name="3"} };
foreach (Num num in nums1.DefaultIfEmpty(defaultNum))
{
Console.WriteLine("Name: {0}", num.Name);
}
/**
匹配到元素,以此遍历
1
2
3
**/
List<Num> nums2 = new List<Num>();
foreach (Num num in nums2.DefaultIfEmpty(defaultNum))
{
Console.WriteLine("Name: {0}", num.Name);
}
/**
没有匹配到元素,显示默认值0
0
**/
.Distinct()方法用于去除序列中重复的元素,返回非重复的序列
Num[] nums = { new Num { Code = 1 },
new Num { Code = 1 },
new Num { Code = 2 },
new Num { Code = 3 } };
IEnumerable<Num> noduplicates =nums.Distinct();//去除重复元素1
foreach (var num in nums)
Console.WriteLine(num.Code);
/*
1
2
3
*/
.GroupBy()方法用于将集合中的元素按照某个键进行分组,并返回一个 IGrouping<TKey, TElement>
的序列。每个分组都是一个 IGrouping<TKey, TElement>
对象,其中 TKey
是分组键的类型,TElement
是原始序列中元素的类型,它类似于 SQL 中的Group By语句。
// 创建一个 Recruit 集合
var recruits = new List<Recruit>
{
new Recruit { Id = 1, CreateDate = 20240101, RecruitTitle = "Job 1", IsEnabled = true },
new Recruit { Id = 2, CreateDate = 20240102, RecruitTitle = "Job 2", IsEnabled = true },
new Recruit { Id = 3, CreateDate = 20240103, RecruitTitle = "Job 3", IsEnabled = false },
new Recruit { Id = 4, CreateDate = 20240101, RecruitTitle = "Job 4", IsEnabled = true }
};
// 使用 GroupBy 方法按 IsEnabled 分组
var groupedByEnabled = recruits.GroupBy(r => r.IsEnabled);
// 输出结果
foreach (var group in groupedByEnabled)
{
Console.WriteLine($"IsEnabled: {group.Key}");
foreach (var recruit in group)
{
Console.WriteLine($" ID: {recruit.Id}, CreateDate: {recruit.CreateDate}, Title: {recruit.RecruitTitle}");
}
}
// 使用 GroupBy 方法按 IsEnabled 和 CreateDate 分组
var groupedByEnabledAndDate = recruits.GroupBy(r => new { r.IsEnabled, r.CreateDate });
// 输出结果
foreach (var group in groupedByEnabledAndDate)
{
Console.WriteLine($"IsEnabled: {group.Key.IsEnabled}, CreateDate: {group.Key.CreateDate}, Count: {group.Count()}");
}
/*
IsEnabled: True
ID: 1, CreateDate: 20240101, Title: Job 1
ID: 2, CreateDate: 20240102, Title: Job 2
ID: 4, CreateDate: 20240101, Title: Job 4
IsEnabled: False
ID: 3, CreateDate: 20240103, Title: Job 3
IsEnabled: True, CreateDate: 20240101, Count: 2
IsEnabled: True, CreateDate: 20240102, Count: 1
IsEnabled: False, CreateDate: 20240103, Count: 1
*/
.FirstOrDefault()方法返回序列中满足条件的第一个元素;如果未找到此类元素,则返回指定的默认值。
.First()方法返回第一个元素或者满足指定条件的序列中的第一个元素。用法一致
//不带条件,返回第一个元素
var res1 = recruits.FirstOrDefault();
//带条件,返回满足条件的第一个元素
var res2 = recruits.FirstOrDefault(r => r.Id==5);
持续学习更新中·····
参考文档https://learn.microsoft.com/zh-cn/dotnet/api/system.linq.enumerable?view=net-8.0