2018-07-26 【c#】Linq语句

会用两种写法了,第一种,firstordefault里面,直接写想要的
第二种,where里面,需要return true/false

例:
image.png

概念如下

凡是实现了IEnumerable接口的都可以用Linq语句进行查询
Linq: Language Intergrated Query 语言集成查询
在这之前,都是一个查询字符串,传递给动态库进行解析查询
IEnumerable
LINQ to SQL / XML / DataSet / Objects


Where方法
public static IEnumerable Where(this IEnumerable source, Func predicate);
1.where函数后面声明了将要使用的泛型,返回值是该泛型的集合的迭代器;
2.xxx.Where 自动传入this迭代器参数,扩展方法
3.Func predicate 是内部嵌套使用的泛型代理方法,作为参数传递
3.1.public delegate TResult Func(T arg);
3.2.该方法在此处,需要传入一个 Where中 TSource类型,返回bool型
其他方法
其他方法与Where方法大同小异,都在System.Linq命名空间下的Enumerable类中。


1.最简单的数组进行Linq查询


两次输出结果一样.png
using System;
using System.Collections.Generic;
using System.Text;
using System.Linq;

namespace LinqTest
{
    class Program
    {
        static void Main(string[] args)
        {
            //Linq: Language Intergrated Query 语言集成查询
            //在这之前,都是一个查询字符串,传递给动态库进行解析查询
            //IEnumerable
            //LINQ to SQL/XML/DataSet/Objects

            int[] numbers = { 5, 10, 8, 3, 6, 12 };
            //1.Query syntax
            var numQuery1 = from num in numbers
                            where num % 2 == 0
                            orderby num
                            select num;

            foreach(var x in numQuery1)
            {
                Console.WriteLine(x);
            }
            Console.ReadLine();
            //2.Method syntax
            var numQuery2 = numbers.Where((x) => { return (x % 2) == 0; }).OrderBy(x => x);

            foreach (var x in numQuery1)
            {
                Console.WriteLine(x);
            }
            Console.ReadLine();
        }
    }
}

2.以下四个方法,达到效果相同。虽然,到现在还是没弄懂selectwhere这个复杂的泛型的结构,但是能用了;效果是,把两个list投影到一个list进行查找(据说Linq的效率还很高)。那么以后查找不遍历了,使用linq。

    public class Item
    {
        public int ID;
        public string name;
    }
    List> AllList = new List>();

    public Item GetItem0(int id)
    {
        foreach (var x in AllList)
        {
            foreach (var y in x)
            {
                if (y.ID == id) return y;
            }
        }
        return null;
    }

    public Item GetItemByID0(int id) => AllList.SelectMany(c => c).FirstOrDefault(c => c.ID == id);

    public Item GetItemByID1(int id)
    {
        return AllList.SelectMany(c => c).FirstOrDefault(c => c.ID == id);
    }

    public Item GetItemByID2(int id)
    {
        return AllList.SelectMany(c => c).Where(c => c.ID == id).First();
    }

你可能感兴趣的:(2018-07-26 【c#】Linq语句)