常用LINQ方法

语言集成查询(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 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值