C# Linq方法

准备的示例数据

using System.Data;
using System.Linq;
using System.Security.Cryptography;
using System.Xml.Linq;

List<Student> students = new List<Student>
{
    new Student
    {
        Id = 1,
        Name = "赵雷",
        Age = 21,
        BrithDate = DateTime.Parse("1990-01-01"),
        Sex = Sex.},
    new Student
    {
        Id = 2,
        Name = "钱电",
        Age = 25,
        BrithDate = DateTime.Parse("1990-12-21"),
        Sex = Sex.},
    new Student
    {
        Id = 3,
        Name = "孙风",
        Age = 23,
        BrithDate = DateTime.Parse("1990-05-20"),
        Sex = Sex.},
    new Student
    {
        Id = 4,
        Name = "李云",
        Age = 22,
        BrithDate = DateTime.Parse("1990-08-06"),
        Sex = Sex.},
    new Student
    {
        Id = 5,
        Name = "周梅",
        Age = 23,
        BrithDate = DateTime.Parse("1991-12-01"),
        Sex = Sex.},
    new Student
    {
        Id = 6,
        Name = "吴兰",
        Age = 24,
        BrithDate = DateTime.Parse("1992-03-01"),
        Sex = Sex.},
    new Student
    {
        Id = 7,
        Name = "郑竹",
        Age = 25,
        BrithDate = DateTime.Parse("1989-07-01"),
        Sex = Sex.},
    new Student
    {
        Id = 8,
        Name = "王菊",
        Age = 24,
        BrithDate = DateTime.Parse("1990-01-20"),
        Sex = Sex.},
};

List<Student> students1 = new List<Student>();

List<Teacher> teachers = new List<Teacher>
{
    new Teacher
    {
        Id = 1,
        Name = "周明",
        Age = 34,
        BrithDate = DateTime.Parse("1990-01-20"),
        Sex = Sex.},
    new Teacher
    {
        Id = 2,
        Name = "李康",
        Age = 48,
        BrithDate = DateTime.Parse("1990-01-20"),
        Sex = Sex.},
    new Teacher
    {
        Id = 3,
        Name = "李华",
        Age = 28,
        BrithDate = DateTime.Parse("1990-01-20"),
        Sex = Sex.},
    new Teacher
    {
        Id = 4,
        Name = "唐三",
        Age = 53,
        BrithDate = DateTime.Parse("1990-01-20"),
        Sex = Sex.},
    new Teacher
    {
        Id = 5,
        Name = "洋葱",
        Age = 78,
        BrithDate = DateTime.Parse("1990-01-20"),
        Sex = Sex.}
};

List<Person> personList = new List<Person>
{
    new Person
    {
        Name = "P1",
        Age = 18,
        Gender = "Male",
        Dogs = new Dog[]
        {
            new Dog { Name = "D1" },
            new Dog { Name = "D2" }
        }
    },
    new Person
    {
        Name = "P2",
        Age = 19,
        Gender = "Male",
        Dogs = new Dog[]
        {
            new Dog { Name = "D3" }
        }
    },
    new Person
    {
        Name = "P3",
        Age = 17,
        Gender = "Female",
        Dogs = new Dog[]
        {
            new Dog { Name = "D4" },
            new Dog { Name = "D5" },
            new Dog { Name = "D6" }
        }
    }
};
var list1 = from item in students
            select item.Name;
foreach (var item in list1)
{
    Console.WriteLine(item); // 赵雷 钱电 孙风 李云 周梅 吴兰 郑竹 王菊
}

计数

var list2 = students.Count();
Console.WriteLine(list2); // 8

升序

var list3 = students.OrderBy(x => x.Id).ToList();
foreach (var item in list3)
{
    Console.WriteLine($"id={item.Id}  name={item.Name}  age={item.Age} " +
        $"brithDate={item.BrithDate.ToString("yyyy-MM-dd")} sex={item.Sex}");

    //id = 1  name = 赵雷  age = 21 brithDate = 1990 - 01 - 01 sex = 男
    //id = 2  name = 钱电  age = 25 brithDate = 1990 - 12 - 21 sex = 男
    //id = 3  name = 孙风  age = 23 brithDate = 1990 - 05 - 20 sex = 男
    //id = 4  name = 李云  age = 22 brithDate = 1990 - 08 - 06 sex = 男
    //id = 5  name = 周梅  age = 23 brithDate = 1991 - 12 - 01 sex = 女
    //id = 6  name = 吴兰  age = 24 brithDate = 1992 - 03 - 01 sex = 女
    //id = 7  name = 郑竹  age = 25 brithDate = 1989 - 07 - 01 sex = 女
    //id = 8  name = 王菊  age = 24 brithDate = 1990 - 01 - 20 sex = 女
}

降序

var list4 = students.OrderByDescending(x => x.Id).ToList();
foreach (var item in list4)
{
    Console.WriteLine($"id={item.Id}  name={item.Name}  age={item.Age} " +
        $"brithDate={item.BrithDate.ToString("yyyy-MM-dd")} sex={item.Sex}");

    //id = 8  name = 王菊  age = 24 brithDate = 1990 - 01 - 20 sex = 女
    //id = 7  name = 郑竹  age = 25 brithDate = 1989 - 07 - 01 sex = 女
    //id = 6  name = 吴兰  age = 24 brithDate = 1992 - 03 - 01 sex = 女
    //id = 5  name = 周梅  age = 23 brithDate = 1991 - 12 - 01 sex = 女
    //id = 4  name = 李云  age = 22 brithDate = 1990 - 08 - 06 sex = 男
    //id = 3  name = 孙风  age = 23 brithDate = 1990 - 05 - 20 sex = 男
    //id = 2  name = 钱电  age = 25 brithDate = 1990 - 12 - 21 sex = 男
    //id = 1  name = 赵雷  age = 21 brithDate = 1990 - 01 - 01 sex = 男
}

次要升序

var list5 = students.OrderBy(x => x.Age).ThenBy(x => x.Id).ToList();
foreach (var item in list5)
{
    Console.WriteLine($"id={item.Id}  name={item.Name}  age={item.Age} " +
        $"brithDate={item.BrithDate.ToString("yyyy-MM-dd")} sex={item.Sex}");

    //id = 1  name = 赵雷  age = 21 brithDate = 1990 - 01 - 01 sex = 男
    //id = 4  name = 李云  age = 22 brithDate = 1990 - 08 - 06 sex = 男
    //id = 3  name = 孙风  age = 23 brithDate = 1990 - 05 - 20 sex = 男
    //id = 5  name = 周梅  age = 23 brithDate = 1991 - 12 - 01 sex = 女
    //id = 6  name = 吴兰  age = 24 brithDate = 1992 - 03 - 01 sex = 女
    //id = 8  name = 王菊  age = 24 brithDate = 1990 - 01 - 20 sex = 女
    //id = 2  name = 钱电  age = 25 brithDate = 1990 - 12 - 21 sex = 男
    //id = 7  name = 郑竹  age = 25 brithDate = 1989 - 07 - 01 sex = 女
}

次要降序

var list6 = students.OrderByDescending(x => x.Age).ThenByDescending(x => x.Id).ToList();
foreach (var item in list6)
{
    Console.WriteLine($"id={item.Id}  name={item.Name}  age={item.Age} " +
        $"brithDate={item.BrithDate.ToString("yyyy-MM-dd")} sex={item.Sex}");

    //id = 7  name = 郑竹  age = 25 brithDate = 1989 - 07 - 01 sex = 女
    //id = 2  name = 钱电  age = 25 brithDate = 1990 - 12 - 21 sex = 男
    //id = 8  name = 王菊  age = 24 brithDate = 1990 - 01 - 20 sex = 女
    //id = 6  name = 吴兰  age = 24 brithDate = 1992 - 03 - 01 sex = 女
    //id = 5  name = 周梅  age = 23 brithDate = 1991 - 12 - 01 sex = 女
    //id = 3  name = 孙风  age = 23 brithDate = 1990 - 05 - 20 sex = 男
    //id = 4  name = 李云  age = 22 brithDate = 1990 - 08 - 06 sex = 男
    //id = 1  name = 赵雷  age = 21 brithDate = 1990 - 01 - 01 sex = 男
}

颠倒顺序(反转)

list6.Reverse();
foreach (var item in list6)
{
    Console.WriteLine($"id={item.Id}  name={item.Name}  age={item.Age} " +
        $"brithDate={item.BrithDate.ToString("yyyy-MM-dd")} sex={item.Sex}");

    //id = 1  name = 赵雷  age = 21 brithDate = 1990 - 01 - 01 sex = 男
    //id = 4  name = 李云  age = 22 brithDate = 1990 - 08 - 06 sex = 男
    //id = 3  name = 孙风  age = 23 brithDate = 1990 - 05 - 20 sex = 男
    //id = 5  name = 周梅  age = 23 brithDate = 1991 - 12 - 01 sex = 女
    //id = 6  name = 吴兰  age = 24 brithDate = 1992 - 03 - 01 sex = 女
    //id = 8  name = 王菊  age = 24 brithDate = 1990 - 01 - 20 sex = 女
    //id = 2  name = 钱电  age = 25 brithDate = 1990 - 12 - 21 sex = 男
    //id = 7  name = 郑竹  age = 25 brithDate = 1989 - 07 - 01 sex = 女
}

去重 (todo: 针对对象如何去重)

var list8 = students.Select(x => x.Age).Distinct().ToList();
foreach (var item in list8)
{
    Console.WriteLine(item); // 21 25 23 22 24
}

差集

List<int> list9 = new List<int> { 1, 2, 3, 4 };
List<int> list10 = new List<int> { 3, 4, 5, 6 };

List<int> chajiList = list9.Except(list10).ToList();
foreach (var item in chajiList)
{
    Console.WriteLine(item); // 1 2
}

交集

var list11 = list9.Intersect(list10);
foreach (var item in list11)
{
    Console.WriteLine(item); // 3 4
}

并集

var list12 = list9.Union(list10);
foreach (var item in list12)
{
    Console.WriteLine(item); // 1 2 3 4 5 6
}

筛选

var list13 = students.Where(x => x.Age >= 24).ToList();
foreach (var item in list13)
{
    Console.WriteLine($"id={item.Id}  name={item.Name}  age={item.Age} " +
        $"brithDate={item.BrithDate.ToString("yyyy-MM-dd")} sex={item.Sex}");

    //id = 2  name = 钱电  age = 25 brithDate = 1990 - 12 - 21 sex = 男
    //id = 6  name = 吴兰  age = 24 brithDate = 1992 - 03 - 01 sex = 女
    //id = 7  name = 郑竹  age = 25 brithDate = 1989 - 07 - 01 sex = 女
    //id = 8  name = 王菊  age = 24 brithDate = 1990 - 01 - 20 sex = 女
}

所有元素是否满足条件

var isMan = students.All(x => x.Sex == Sex.);
Console.WriteLine(isMan); // false

var isChengNian = students.All(x => x.Age >= 18);
Console.WriteLine(isChengNian); // true

部分元素是否满足条件

var hasWoman = students.Any(x => x.Sex == Sex.);
Console.WriteLine(hasWoman); // true

var hasStudent = students1.Any();
Console.WriteLine(hasStudent); // false

是否包含元素

var isContains = list9.Contains(4);
Console.WriteLine(isContains); // true

映射

var list14 = students.Select(x => new { sid = x.Id, sname = x.Name }).ToList();
foreach (var item in list14)
{
    Console.WriteLine($"sid={item.sid}, sname={item.sname}");

    //sid = 1, sname = 赵雷
    //sid = 2, sname = 钱电
    //sid = 3, sname = 孙风
    //sid = 4, sname = 李云
    //sid = 5, sname = 周梅
    //sid = 6, sname = 吴兰
    //sid = 7, sname = 郑竹
    //sid = 8, sname = 王菊
}

映射

var dogs = personList.SelectMany(p => p.Dogs);
foreach (var dog in dogs)
{
    Console.WriteLine(dog.Name); // D1 D2 D3 D4 D5 D6
}

跳过

var list15 = students.Skip(1).ToList();
foreach (var item in list15)
{
    Console.WriteLine($"id={item.Id}  name={item.Name}  age={item.Age} " +
        $"brithDate={item.BrithDate.ToString("yyyy-MM-dd")} sex={item.Sex}");

    //id = 2  name = 钱电  age = 25 brithDate = 1990 - 12 - 21 sex = 男
    //id = 3  name = 孙风  age = 23 brithDate = 1990 - 05 - 20 sex = 男
    //id = 4  name = 李云  age = 22 brithDate = 1990 - 08 - 06 sex = 男
    //id = 5  name = 周梅  age = 23 brithDate = 1991 - 12 - 01 sex = 女
    //id = 6  name = 吴兰  age = 24 brithDate = 1992 - 03 - 01 sex = 女
    //id = 7  name = 郑竹  age = 25 brithDate = 1989 - 07 - 01 sex = 女
    //id = 8  name = 王菊  age = 24 brithDate = 1990 - 01 - 20 sex = 女
}

跳过(根据条件)

var list16 = students.SkipWhile(x => x.Sex == Sex.).ToList();
foreach (var item in list16)
{
    Console.WriteLine($"id={item.Id}  name={item.Name}  age={item.Age} " +
        $"brithDate={item.BrithDate.ToString("yyyy-MM-dd")} sex={item.Sex}");

    //id = 5  name = 周梅  age = 23 brithDate = 1991 - 12 - 01 sex = 女
    //id = 6  name = 吴兰  age = 24 brithDate = 1992 - 03 - 01 sex = 女
    //id = 7  name = 郑竹  age = 25 brithDate = 1989 - 07 - 01 sex = 女
    //id = 8  name = 王菊  age = 24 brithDate = 1990 - 01 - 20 sex = 女
}

提取

var list17 = students.Take(3).ToList();
foreach (var item in list17)
{
    Console.WriteLine($"id={item.Id}  name={item.Name}  age={item.Age} " +
        $"brithDate={item.BrithDate.ToString("yyyy-MM-dd")} sex={item.Sex}");

    //id = 1  name = 赵雷  age = 21 brithDate = 1990 - 01 - 01 sex = 男
    //id = 2  name = 钱电  age = 25 brithDate = 1990 - 12 - 21 sex = 男
    //id = 3  name = 孙风  age = 23 brithDate = 1990 - 05 - 20 sex = 男
}

提取 (根据条件)

var list18 = students.TakeWhile(x => x.Sex == Sex.).ToList();
foreach (var item in list18)
{
    Console.WriteLine($"id={item.Id}  name={item.Name}  age={item.Age} " +
        $"brithDate={item.BrithDate.ToString("yyyy-MM-dd")} sex={item.Sex}");

    //id = 1  name = 赵雷  age = 21 brithDate = 1990 - 01 - 01 sex = 男
    //id = 2  name = 钱电  age = 25 brithDate = 1990 - 12 - 21 sex = 男
    //id = 3  name = 孙风  age = 23 brithDate = 1990 - 05 - 20 sex = 男
    //id = 4  name = 李云  age = 22 brithDate = 1990 - 08 - 06 sex = 男
}

联接 (内连接)

/*宠物主人*/
Personal magnus = new Personal { Name = "Hedlund, Magnus" };
Personal terry = new Personal { Name = "Adams, Terry" };
Personal charlotte = new Personal { Name = "Weiss, Charlotte" };

/*宠物*/
Pet barley = new Pet { Name = "Barley", Owner = terry };
Pet boots = new Pet { Name = "Boots", Owner = terry };
Pet whiskers = new Pet { Name = "Whiskers", Owner = charlotte };
Pet daisy = new Pet { Name = "Daisy", Owner = magnus };

/*宠物主人列表集合*/
List<Personal> people = new List<Personal> { magnus, terry, charlotte };
/*宠物列表集合*/
List<Pet> pets = new List<Pet> { barley, boots, whiskers, daisy };

var query = people.Join(pets, person => person, pet => pet.Owner
        , (person, pet) => new { OwnerName = person.Name, Pet = pet.Name });

var query2 = pets.Join(people, pet => pet.Owner, person => person
        , (pet, person) => new { OwnerName = person.Name, Pet = pet.Name });

/循环输出最终结果 格式:宠物主人名-宠物名/

foreach (var obj in query2)
{
    Console.WriteLine("{0} - {1}", obj.OwnerName, obj.Pet);
}

// 分组
var list19 = students.GroupBy(g => g.Sex);
foreach (var item in list19)
{
    Console.WriteLine(item.Key);
    foreach (var i in item)
    {
        Console.WriteLine($"id={i.Id}  name={i.Name}  age={i.Age} " +
        $"brithDate={i.BrithDate.ToString("yyyy-MM-dd")} sex={i.Sex}");
    }
}
var list20 = students.GroupBy(g => g.Sex).Select(x => x.Select(y => new { id = y.Id, name = y.Name, sex = y.Sex, sex1 = x.Key })).ToList();
foreach (var item in list20)
{
    foreach (var i in item)
    {
        Console.WriteLine($"id={i.id}  name={i.name} " +
        $"sex={i.sex} sex1={i.sex1}");
    }
}

联接并分组 GrooupJoin

变一对多字典 ToLookup

平均值

var average = students.Average(g => g.Age);
Console.WriteLine(average); // 23.375

计数

var count = students.Count(x => x.Sex == Sex.);
Console.WriteLine(count);  // 4

计数(大型集合)LongCount

最大值

var max = students.Max(g => g.Age);
Console.WriteLine(max); // 25

最小值

var min = students.Min(g => g.Age);
Console.WriteLine(min);  // 21

求和

var sum = students.Sum(s => s.Id);
Console.WriteLine(sum);  // 36

串联 Concat 合并列表

var concat = list9.Concat(list10);
foreach (var item in concat)
{
    Console.WriteLine(item);

    //1
    //2
    //3
    //4
    //3
    //4
    //5
    //6
}

变IEeumerable

var list21 = students.AsEnumerable();

变IQueryable

var list22 = students.AsQueryable();

// DataTable dt = …//获取从数据库中取出的数据(假设只有一条记录)
// 转换 Cast
//Cast()用来将非泛型的序列转换为泛型的序列

DataRow row = dt.Rows.Cast<DataRow>().Single();

转换 OfType

// OfType():用来将序列中可以转换的转换为指定的序列

// 如:一个object数组中有整数和字符串,现在想找出其中最大的数

object[] obj = { 1, 23, 4, 5, 555, "aaa", "bbb" };
int max1 = obj.OfType<int>().Max();

这样就不会抛出异常

变数组 ToArray

var list23 = students.ToArray();

变字典 ToDictionary

var results = new Dictionary<int, Product>();
foreach (var product in products)
{
    results.Add(product.Id, product);
}
var list24 = students.ToDictionary(x => x.Id, y => y.Name);
foreach (var item in list24)
{
    Console.WriteLine($"id = {item.Key}, name = {item.Value}");

    //id = 1, name = 赵雷
    //id = 2, name = 钱电
    //id = 3, name = 孙风
    //id = 4, name = 李云
    //id = 5, name = 周梅
    //id = 6, name = 吴兰
    //id = 7, name = 郑竹
    //id = 8, name = 王菊
}

变List

var list25 = students.ToList();

指定索引 ElementAt

指定索引(超出索引, 默认取值) ElementAtOrDefault

第一个

var list26 = students.First();
var list27 = students.First(x => x.Age == 23);
Console.WriteLine(list27.Name);  // 孙风

第一个(找不到取默认值)

var list28 = students1.FirstOrDefault();
if (list28 == null)
{
    Console.WriteLine("list28为null"); // list28为null
}

最后一个

var list29 = students.Last(x => x.Age == 23);
Console.WriteLine(list29.Name); // 周梅

最后一个(找不到取默认值)

var list30 = students1.LastOrDefault();
if (list30 == null)
{
    Console.WriteLine("list30为null"); // list30为null
}

唯一

var list31 = students.Single(x => x.Id == 5);
Console.WriteLine(list31.Name); // 周梅

唯一 (找不到取默认值)

var list32 = students.SingleOrDefault(x => x.Id == 15);
if (list32 == null)
{
    Console.WriteLine("list32为null"); // list32为null
}

成对比较 SequenceEqual

默认值集合 DefaultifEmpty

空集合 Empty

包含数字序列的集合 Range

IEnumerable<int> squares = Enumerable.Range(1, 10).Select(x => x * x);
foreach (int num in squares)
{
    Console.WriteLine(num);

    //1
    //4
    //9
    //16
    //25
    //36
    //49
    //64
    //81
    //100
}

重复值的集合 Repeat 10是要重复的值, 5是重复的次数

var val = Enumerable.Repeat(10, 5);
foreach (int res in val)
{
    Console.WriteLine(res);

    //10
    //10
    //10
    //10
    //10
}

测试数据类

public class Student
{
    public int Id { get; set; }
    public string Name { get; set; }
    public int Age { get; set; }
    public DateTime BrithDate { get; set; }
    public Sex Sex { get; set; }
}

public class Teacher
{
    public int Id { get; set; }
    public string Name { get; set; }
    public int Age { get; set; }
    public DateTime BrithDate { get; set; }
    public Sex Sex { get; set; }
}
public enum Sex
{,}

class Person
{
    public string Name { set; get; }
    public int Age { set; get; }
    public string Gender { set; get; }
    public Dog[] Dogs { set; get; }
}

public class Dog
{
    public string Name { set; get; }
}

/*宠物主人*/
class Personal
{
    public string Name { get; set; }
}
/*宠物*/
class Pet
{
    public string Name { get; set; }
    public Personal Owner { get; set; }
}

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值