LINQ基础概述

介绍LINQ基础之前,首说一下LINQ 的历史和LINQ是什么,然后说一下学习 LINQ要了解的东西和 LINQ基础语法
LINQ 的历史

从语言方面的进化
委托
匿名方法
Lambda表达式
Linq查询表达式

上边这四个我会在下边一一解说

从时间方面的演进
–2004年
–2005年9月,C#2.0的PDC上发布
–2005年11月,C#2.0预览版
–2006年1月,VB8.0预览版
–2007年11月,.net 3.5发布

LINQ是什么

LINQ是语言级集成查询(Language INtegrated Query)
LINQ是一种用来进行数据访问的编程模型,使得.NET语言可以直接支持数据查询
LINQ的目标是降低访问数据的复杂度
LINQ可以用统一的方法访问不同类型的数据,可以将数据作为对象使用
能够更好地与编程模型集成
可以在Visual Studio中进行智能提示
动态编程

LinQ目的

面向对象技术诞生以来并没有解决降低访问和整合信息数据的复杂度的问题。其中两个最主要访问的数据源与数据库和 XML 相关。

使用LINQ的目的是为了提供一个解决对象关系映射问题的方案,同时简化对象和数据源的交互。LINQ最终发展成为一个通用语言集成查询的工具包。

LINQ正如它的名字“集成查询语言”的含义一样,它提供给程序员一个统一的编程界面。程序员不需要关心他将要操作的将是关系数据库还是XML,甚至是远程的对象,它都采用同样的查询方式。就如同通过T-SQL操纵数据库一样,不管是Oracle,SyBase还是SQL Server,他们的Select语法都是一样的。

有了LINQ,程序员便可以不再沉泥于不同的数据访问技术的学习。不管编程语言如何发展,还是数据库技术的发展,都不再需要程序员进行学习,数据存储的效率由数据库厂商进行优化,灵活的数据操作方法由数据访问中间件厂商提供,程序员只需要编写业务逻辑。

LINQ包括:
–LINQ to Objects 用于对象的查询
–LINQ to XML 对XML数据的查询
–LINQ to ADO.NET 对数据库的查询
     LINQ to DataSets 数据集
     LINQ to Entities ORM对象
     LINQ to SQL 简易ORM框架
命名空间在System.Linq
实现 IEnumerable<T> 或 IQueryable<T> 接口的对象都可使用LINQ操作

LINQ框架图

委托
委托是一种定义方法签名的类型。 当实例化委托时,您可以将其实例与任何具有兼容签名的方法相关联。 您可以通过委托实例调用方法。
委托用于将方法作为参数传递给其他方法。 事件处理程序就是通过委托调用的方法
public delegate void MyF1( int a);
 
public void M1( int a)
{
             Console .WriteLine(a);
  }
  MyF1 _myf1 = M1 ;
  myf1(3);
与委托的签名(由返回类型和参数组成)匹配的任何可访问类或结构中的任何方法都可以分配给该委托。 方法可以是静态方法,也可以是实例方法。 这样就可以通过编程方式来更改方法调用,还可以向现有类中插入新代码。 只要知道委托的签名,就可以分配您自己的方法。
 
匿名方法
我们在使用一个方法的时候, 一般情况下我们会先把方法名、参数、返回值
写出来也称做命名方法
int MyMethod(int a){}
匿名方法的意思就是不用给定方法的名称。允许我们定义委托对象可以接收的代码
上边的委托我们可以写成
MyF1 _f = delegate ( int a)
                {
                    Console .WriteLine(a);
                };
            _f(1);
例button的点击事件
通常的写法是
button1.Click += button1_Click;
void button1_Click(object sender, EventArgs e)
        {
            MessageBox.Show("Click!" )
        }
用匿名方法可以这样
button1.Click += delegate( object obj1, EventArgs e)
                {
                    MessageBox .Show("Click!" );
                };
 
Lambda 表达式
lambda 取代的匿名方法
Lambda 表达式是一个可用于创建委托或表达式树类型的匿名函数。 通过使用 lambda 表达式,可以写入可作为参数或返回为函数调用值的本地函数。 Lambda 表达式对于编写 LINQ 查询表达式特别有用。
若要创建 Lambda 表达式,必须在 Lambda 运算符 => 左侧指定输入参数(如果有),然后在另一侧输入表达式或语句块。 例如,lambda 表达式 x => x * x 指定名为 x 的参数并返回 x 的平方。 
我们还是用上边的delegate例子:
MyF1 _my1 = a =>
                {
                    Console .WriteLine(a);
                };
_my1(3);
Button的点击事件可以写成这样
button1.Click += (obj1, obje2) =>
                {
                    MessageBox.Show("Click!" );
                };
 
Linq的基本语法
所有 LINQ 查询操作都由以下三个不同的操作组成:
获取数据源。
创建查询。
执行查询。
查询表达式必须以 from 子句开头,并且必须以 select 或 group 子句结尾。 在第一个 from 子句和最后一个 select 或 group 子句之间,查询表达式可以包含一个或多个下列可选子句:where、orderby、join、let 甚至附加的 from 子句。 还可以使用 into 关键字使 join 或 group 子句的结果能够充当同一查询表达式中附加查询子句的源。
    int[] _scores = new int [] { 97, 92, 81, 60 };           
            IEnumerable <int > _query =
                from score in _scores
                where score > 80
                select score;           
            foreach (int in _query)
            {
                Console .WriteLine(i + " " );
            } 
也可以这么写
  IEnumerable< int > _query = _scores.Where(x =>  x > 80);
            foreach (int in _query)
            {
                Console .WriteLine(i + " " );
            }
 

下图显示了完整的查询操作。 在 LINQ 中,查询的执行与查询本身截然不同;换句话说,如果只是创建查询变量,则不会检索任何数据。

完整的 LINQ 查询操作
查询变量本身只是存储查询命令。 实际的查询执行会延迟到在 foreach 语句中循环访问查询变量时发生。 此概念称为“延迟执行”

转载于:https://www.cnblogs.com/li-peng/p/3512080.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/493520.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

机器人“快递小哥”上岗了!京东配送机器人编队长沙亮相

11 月 22 日上午&#xff0c;京东物流配送机器人智能配送站启用仪式在长沙举行&#xff0c;随着载有用户订单的配送机器人编队从站内依次发出&#xff0c;全球首个由机器人完成配送任务的智能配送站正式投入使用。首个京东配送机器人智能配送站位于长沙市科技新城&#xff0c;占…

3D打印技术如何影响未来

来源&#xff1a;学习时报我们应该对3D打印技术保持谨慎态度&#xff0c;但过度反应和监管也可能会扼杀创新。历史经验表明&#xff0c;在技术的不利一面被应用之前进行规范构建对话是最有效的。因此&#xff0c;各国际主体&#xff0c;包括国家、商业领袖、政府官员和其他政策…

HDR简单介绍

问题定义 HDR字面意思是高动态范围High Dynamic Range&#xff0c;而动态范围是高图像质量的五个要素之一&#xff08;其余是1. 分辨率&#xff0c;2.位深度&#xff0c;3.帧速率&#xff0c;4.色域&#xff09;,而画质直接关系到人眼的主观感受。 如果将动态范围理解为量化的…

争议中挺进全新里程——中国“超级对撞机”《概念设计报告》发布侧记

来源&#xff1a;科技导报2018 年11 月12 日下午6 点半&#xff0c;北京市玉泉路&#xff0c;中国科学院高能物理研究所&#xff0c;所有建筑和行人沐浴在初冬夜晚的清冷与安静之中。不同的是&#xff0c;主楼西侧一座新楼的大厅里&#xff0c;却充满了热望和兴奋。这里正进行着…

haar级联分类器--人脸检测和匹配

分类器链接&#xff0c;https://download.csdn.net/download/fanzonghao/10582586 代码&#xff1a; import numpy as np import cv2# 实例化人脸分类器 face_cascade cv2.CascadeClassifier(./haarcascades/haarcascade_frontalface_default.xml) # 实例化眼睛分类器 eye_c…

社会科技奖不是新鲜事?如何真正做大

来源&#xff1a;中国科学报我国的社会力量设立科学技术奖励起步于上世纪80年代。科技部网站上2018年9月5日更新的《社会科技奖励目录》显示&#xff0c;目前我国共有269个社会科技奖项登记在册&#xff0c;其中最后一个正是未来科学大奖。11月18日&#xff0c;2018未来科学大奖…

泊松融合——用了拉普拉斯但没有金字塔

图像融合的方式有alpha融合&#xff0c;拉普拉斯金字塔融合。 同样是基于拉普拉斯算子&#xff0c;我们可以直接用求解的方式得到融合后的图像。因为人眼对二阶导是更敏感的&#xff0c;所以只要我们指定了融合区域内部的梯度值&#xff0c;并且知道融合边界处的值&#xff0c…

三层神经网络实现手写字母的识别(基于tensorflow)

数据集的制作参考这篇文章&#xff1a; https://blog.csdn.net/fanzonghao/article/details/81229409 一&#xff0c;读取数据集 import tensorflow as tf import numpy as np import pickle import matplotlib.pyplot as plt #对于x变成(samles,pixs),y变成one_hot (sample…

(转)Kinect背景移除支持多人

原文&#xff1a;http://blogs.msdn.com/b/k4wdev/archive/2013/10/22/using-kinect-background-removal-with-multiple-users.aspx?utm_sourcetuicool Introduction: Background Removal in Kinect for Windows The 1.8 release of the Kinect for Windows Developer Toolkit…

德国汉堡科学院院士张建伟:信息物理系统驱动智能未来

来源&#xff1a;OFweek工控网随着第四次工业革命的到来&#xff0c;信息技术&#xff08;IT&#xff09;和运营技术&#xff08;OT&#xff09;的融合成为新趋势&#xff0c;工厂开始进入数字化转型阶段&#xff0c;而德国“工业4.0”战略给全球制造业发展带来启示&#xff0c…

两层卷积网络实现手写字母的识别(基于tensorflow)

可和这篇文章对比&#xff0c;https://blog.csdn.net/fanzonghao/article/details/81489049&#xff0c;数据集来源代码和链接一样。 import tensorflow as tf import numpy as np import matplotlib.pyplot as plt import read_pickle_datasettrain_dataset,train_label,vali…

焦李成教授谈深度神经网络发展历程

来源&#xff1a;西电人工智能学院摘要&#xff1a;焦李成教授谈深度神经网络发展历程2018年11月18日下午&#xff0c;计算机科学与技术学部主任、人工智能学院焦李成教授在成都参加了由中国人工智能学会主办的人工智能大讲堂并做特邀报告&#xff0c;焦李成教授在报告中回顾了…

KNN实现CIFAR-10数据集识别

cs231n链接&#xff1a;http://cs231n.github.io/linear-classify/&#xff0c; 训练集链接&#xff1a;https://download.csdn.net/download/fanzonghao/10592049 KNN缺点&#xff1a;每个测试样本都要循环一遍训练样本。 该数据集由5个data_batch和一个test_batch构成&…

近期苹果、Facebook等科技巨头股价缘何不断下跌?

来源&#xff1a;资本实验室近期&#xff0c;FAANG(Facebook、亚马逊、苹果、Netflix、谷歌)等科技巨头股价都出现了不同程度的下跌&#xff0c;而美国科技股整体的持续大跌&#xff0c;更是引发了全球股市振荡。其中&#xff0c;亚马逊在今年9月初达曾达到1万亿美元市值&#…

概率论基础知识各种分布

离散分布&#xff1a;伯努力分布&#xff0c;二项分布&#xff0c;possion分布 一&#xff0c;伯努力分布 #执硬币 x_arrnp.array([0,1]) #x为1的概率 p0.7 #0 1分布 #由PMF生成对应的概率 离散事件 pr_arrstats.bernoulli.pmf(x_arr,p) plt.plot(x_arr,pr_arr,markero,lines…

AI 芯片和传统芯片的区别

来源&#xff1a;内容来自「知乎汪鹏 」所谓的AI芯片&#xff0c;一般是指针对AI算法的ASIC&#xff08;专用芯片&#xff09;。传统的CPU、GPU都可以拿来执行AI算法&#xff0c;但是速度慢&#xff0c;性能低&#xff0c;无法实际商用。比如&#xff0c;自动驾驶需要识别道路行…

三层神经网络实现手写数字的识别(基于tensorflow)

数据集链接&#xff1a;https://download.csdn.net/download/fanzonghao/10598333 from tensorflow.examples.tutorials.mnist import input_data mnist input_data.read_data_sets("./mnist/", one_hotTrue)import tensorflow as tf# Parameters learning_rate 0…

鼠标终将消失,未来我们有哪些人机交互方式?

来源&#xff1a;资本实验室在人类发明史上&#xff0c;诞生了无数的英雄。他们的发明往往从一项前沿技术到家喻户晓、无处不在&#xff0c;但他们自己却又鲜为人知&#xff0c;美国发明家道格拉斯恩格尔巴特就是其中的代表。20世纪60年代&#xff0c;道格拉斯恩格尔巴特发明了…

两层卷积网络实现手写数字的识别(基于tensorflow)

可和这篇文章对比&#xff1a;https://blog.csdn.net/fanzonghao/article/details/81603367 # coding: utf-8 # ## MNIST数据集from __future__ import division, print_function, absolute_importimport tensorflow as tf# Import MNIST data&#xff0c;MNIST数据集导入 fro…

光波导总结资料

1、写出光波导中的麦克斯韦方程&#xff0c;并把光场分解为纵向分量与横向分量&#xff0c;求出混合模式HE与EH模式的横向电场强度与横向磁场强度的点积&#xff08;用纵向分量表示&#xff09;&#xff08;需要有推导过程&#xff09; 解&#xff1a;在线性、各向同性且时不变…