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<TSource> Where<TSource>(this IEnumerable<TSource> source, Func<TSource, bool> predicate);
1.where函数后面声明了将要使用的泛型<TSource>,返回值是该泛型的集合的迭代器;
2.xxx.Where 自动传入this迭代器参数,扩展方法
3.Func<TSource, bool> predicate 是内部嵌套使用的泛型代理方法,作为参数传递
3.1.public delegate TResult Func<T, TResult>(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<List<Item>> AllList = new List<List<Item>>();

    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();
    }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 首先申明这不是我写的,只是我看到的一篇十分不错的文章,为了防止自己找不到,就整理了下。 一:与LINQ有关的语言特...
    破冰前行阅读 7,650评论 0 6
  • 关于Mongodb的全面总结 MongoDB的内部构造《MongoDB The Definitive Guide》...
    中v中阅读 32,177评论 2 89
  • 136.泛型 泛型代码让你可以写出灵活,可重用的函数和类型,它们可以使用任何类型,受你定义的需求的约束。你可以写出...
    无沣阅读 5,454评论 0 4
  • 操作系统 以最小化方式安装的centos7,安装完成后连wget,ifconfig命令都没有。用yum安装下 换成...
    莊嚴阅读 2,839评论 0 0
  • 让现实生活中的不完美变的有趣 2016-07-07TomFOD工具控 制造缺陷的乐趣 在他工作室的窗子上写着“制造...
    FOD生活升级阅读 3,456评论 0 1

友情链接更多精彩内容