ASP .NET MVC LINQ

1.概述

查询语句是一种从数据源中检索数据的表达式,在开发中受用非常广泛,通常用专属的查询语言来表示。
    随着时间的推移,人们已经为各种数据源开发了不同的语言,为了减轻开发人员的工作,微软推出了新的查
    询技术------LINQ


        LINQ的全称为语言集成查询(Language Integrated Query),提供了一种跨数据源和数据格式的统一模型,
   实现查询
   他使用c#等语言以查询数据库相同的方式查询内存数据。在LINQ中,可以使用相同的编码模式来查询和转换XML
文档,SQL数据库,ADO.NET数据集以及.NET集合中的数据, 并支持LINQ查询的任何格式的数据。

 LINQ查询有两种语法可供选择:“方法语法”和“查询语法”
方法语法的本质是通过扩展的方法和Lambda表达式来创建查询。
    Lambda表达式用在基于方法的LINQ查询中,作为诸如Where等标准查询运算符方法的参数


2.关键字

关键字说明
from指定范围变量和数据源
where根据bool表达式从数据源中筛选数据
select指定查询结果中的元素所具有的类型或报答形式
group对查询结果按照键/值执行分组
into提供了一个标识符,它可以充当对join、group或select 子句结果的引用
orderby对查询出的元素执行排序ascending /descending
join按照两个指定匹配条件对等连接两个数据源
let产生一个用于储存子表达式查询结果的范围变量


3.语法

from [type] id  in source
    [join [type] id in source  on expr equals expr [into subGroup]]
    [from [type] id in source  |let id=expr|where condition]
    [orderby irdering,ordering,ordering....]
    select expr | group expr by key
    [into id query]

第一行
    type是可选的,id是是数据源集合中的一项,source是数据源集合,如果集合中的类型
与type指定的类型不同,则导致强制类型转化


    第二行
    一个LINQ语句中可以有0个或多个join子句,此处的source可以不同于第一句中的source。
expr是一个表达式。SubGroup是一个临时变量,它继承自IGroup,代表一个分组,即“一对多
”中的多,可以通过此变量得到该组包含的对象个数 Count 以及该组对象的键 Key


    第三行
    一个LINQ语句中,可以有1或多个from子句,可以有0个或多个let子句(let子句可以创建一
个临时变量),可以有0个或多个where子句(where查询)


    第四行
    一个LINQ语句中可以有0个或多个orderby子句,即排序,每种排列方式以逗号分开


    第五行
    一个LINQ语句必须以select或group by结束,select 是要检索的内容,grpup by是对查询
的内容进行分组


    第六行
    最后一个info子句起到的作用 将前面语句的结果作为后面语句操作的数据源


    查询表达式必须以form 子句开头,并且必须以select或group子句结尾。
    在第一个from子句和最后一个select 或group子句之间,查询表达式可以包含一个或多个
下列可选子句:
    where 、orderby、 join、let,甚至附加的form子句。还可以使用into 关键字使join或group子句
的结果能够充当统一查询表达式中附加查询子句的源

  IEnumerable 接口是LINQ查询的核心接口,只有实现了IEnumerable接口的数据源,才能执行相关的LINQ操作
    LINQ查询分为一下三种
    1.获取数据源   2.创建查询    3.执行查询



4.Lambda表达式



    Lambda表示式(lambda expression)是一个匿名方法,即没有方法名的方法。Lambda表达
式基于数字中的演算得名
    c#使用Lambda 运算符“=>”  ,读为“goes to”


    语法
    形参列表=》方法体


    “=>”运算符具有与赋值运算符“=”相同的优先级,并且是右结合性运算符。
    Lambda表达式的一般规则如下:


    1.Lambda包含的参数数量必须与委托类型包含的参数数量相同。
    2.Lambda中的每个输入参数必须都能够隐式转换为其对应的委托参数
    3.Lambda的返回值(如果有)必须能够隐式转换为委托的返回类型


    Lambda表达式本身没有类型,因为常规类型系统没有“Lambda表达式”这一概念。但是,有时以一种非
正式的方式谈论Lambda的“类型”会很方便。在这些情况下,Lambda类型是指委托类型或Lambda表达式
所转换到Expression类型


5.实例

delegate int del(int i);
        public ActionResult Index()
        {
            List<int> list = new List<int>() { 1, 2, 3, 4, 5, 6, 7, 8, 9, };
            var result = from s in list  where (s%2)==0 select s;
            ViewBag.result = result;

            del mydel = x => x * x;
            ViewBag.Mes = mydel(5);

            string[] str = { "Tom", "Dick", "Harry", "Mary", "Jay" };
            IEnumerable<string> sz = str
                .Where(s => s.Contains("a"))
                .OrderBy(s=>s.Length)
                .Select(s => s.ToUpper());

            ViewBag.Mes2 = sz;

            List<Prson> list2 = new List<ch2.Prson> {
                new Prson { Name="令狐冲",Age=25},
                new Prson { Name="李莫愁",Age=50},
                new Prson { Name="任盈盈",Age=18},
                new Prson { Name="天山童姥",Age=200},               
            };
            //查询
            var p = from s in list2 where s.Age > 20 select s;
            ViewBag.Mes3 = p;

            //方法
            var p2 = list2
                 .Where(l => l.Age > 20);
            ViewBag.Mes4 = p2;
            return View();
        }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值