C# lambda表达式常用方法技巧

本文通过C#代码示例详细讲解了如何使用LINQ从List对象中筛选、转换和聚合数据。包括按特定条件获取name属性、过滤Person对象、提取id属性、转换age属性为可空整数、去重、去除空值、创建字典以及处理可能出现重复值的情况。这些操作对于理解和应用LINQ在实际开发中非常有帮助。
摘要由CSDN通过智能技术生成

首先有个person类

public class Person
    {
        public int id { get; set; }
        public int age { get; set; }
        public string name { get; set; }

    }

然后有个List<Person>对象

            List<Person> listPerson = new List<Person>();
            for(int i = 0; i < 10; i++)
            {
                listPerson.Add(new Person()
                {
                    id = i + 1,
                    age = 18 + (i/3),
                    name = "name-" + (i%4)
                }); 
            }

 

1:List<Person> 中取出name属性,生成一个List<string>对象

List<string> nameList0 = listPerson.Select(it => it.name).ToList();

 

2:List<Person> 中取出name属性 name = name-2 && id>4,生成一个List<Person>对象

List<Person> nameList1 = listPerson.Where(it=>it.id>4).Where(it => "name-2".Equals(it.name)).ToList();

3:List<Person> 中取出id属性大於2的,生成一个List<int>对象

List<int> nameList2 = listPerson.Select(it => it.id).Where(it=>it>2).ToList();

4:List<Person> 中取出age属性,生成一个List<int?>对象

List<int?> nameList3 = listPerson.Select(it => (int?)it.age).ToList();

5:List<int?> 去重,生成一个List<int?>对象

List<int?> nameList4 = nameList3.Distinct().ToList();

6:List<int?> 去空,去空(移除指定條件)是在原對象中移除

            nameList3[0] = null;
            nameList3[1] = null;
            nameList3.RemoveAll(it => it == null);
            Console.WriteLine(JsonUtil.ToJSON(nameList3));

7:List<Person> 中以id属性為key,Person為對象,生成一个Dictionary<int, Person>对象

Dictionary<int, Person>  dict0 = listPerson.ToDictionary(key => key.id, value => value);

8:List<Person> 中以age属性為key,Person為對象,生成一个Dictionary<int, Person>对象,因為age可能有相同,所以要用ToLookup轉換一下

Dictionary<int, Person> dictAge = listPerson.ToLookup(t => t.age, t => t).ToDictionary(key => key.Key, value => value.First());

 

测试代码

 [TestMethod]
        public void HandleTest()
        {
            List<Person> listPerson = new List<Person>();
            for(int i = 0; i < 10; i++)
            {
                listPerson.Add(new Person()
                {
                    id = i + 1,
                    age = 18 + (i/3),
                    name = "name-" + (i%4)
                }); 
            }
            //List<Person> 中取出name属性,生成一个List<string>对象
            List<string> nameList0 = listPerson.Select(it => it.name).ToList();
            Console.WriteLine(JsonUtil.ToJSON(nameList0));

            //List<Person> 中取出name属性 name = name-2 && id>4,生成一个List<Person>对象
            List<Person> nameList1 = listPerson.Where(it=>it.id>4).Where(it => "name-2".Equals(it.name)).ToList();
            Console.WriteLine(JsonUtil.ToJSON(nameList1));

            //List<Person> 中取出id属性大於2的,生成一个List<int>对象
            List<int> nameList2 = listPerson.Select(it => it.id).Where(it=>it>2).ToList();
            Console.WriteLine(JsonUtil.ToJSON(nameList2));

            //List<Person> 中取出age属性,生成一个List<int?>对象
            List<int?> nameList3 = listPerson.Select(it => (int?)it.age).ToList();
            Console.WriteLine(JsonUtil.ToJSON(nameList3));

            //List<int?> 去重,生成一个List<int?>对象
            List<int?> nameList4 = nameList3.Distinct().ToList();
            Console.WriteLine(JsonUtil.ToJSON(nameList4));

            //List<int?> 去空,去空(移除指定條件)是在原對象中移除
            nameList3[0] = null;
            nameList3[1] = null;
            nameList3.RemoveAll(it => it == null);
            Console.WriteLine(JsonUtil.ToJSON(nameList3));

            //List<Person> 中以id属性為key,Person為對象,生成一个Dictionary<int, Person>对象
            Dictionary<int, Person>  dict0 = listPerson.ToDictionary(key => key.id, value => value);
            Console.WriteLine(JsonUtil.ToJSON(dict0));


            //List<Person> 中以age属性為key,Person為對象,生成一个Dictionary<int, Person>对象,因為age可能有相同,所以要用ToLookup轉換一下
            Dictionary<int, Person> dictAge = listPerson.ToLookup(t => t.age, t => t).ToDictionary(key => key.Key, value => value.First());
            Console.WriteLine(JsonUtil.ToJSON(dictAge));
        }

 

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值