zoukankan      html  css  js  c++  java
  • .net MVC成长记录(四)Linq(1)

    今天不忙,没什么事情,继续写写随笔。

    之前的文章写到了EF,很多人留言EF的操作用什么?  今天,就继续给大家分享EF的操作, Linq .

    先从Linq操作Object内置对象开始

    从Linq的基础应用开始。

    自从C#3.5 以后,出现了一个新的特性, 一个名为 var 的关键字, 允许程序无须显示的定义一个局部变量,在使用var声明变量时,编译器会通过该变量初始化代码来推断实际类型,比如

    var first = 1 ; 此时是int 类型

    var secend ="1"; 此时是string类型

    下面我们继续看,Linq的自动属性。

    继推断以后,Linq实现了很多人性化的辅助方法,比如

    User 为已经创建好的构造函数

    List<User> userList =new List<User>();

    userList.Add(new User(1,"张小萌","女"));

    userList.Add(new User(2,"张小猛","男"));

    userList.Add(new User(userID=3,userName="张小猛",userSex="男")); //写法不同

    下面介绍Lambda 拉姆达 表达式,也是属于Linq的一种常用函数表达式

    Lambda的出现,代替了匿名函数的应用,而且Lamabad表达式更为的简便,下面举例子说明。

    string[] strLists = new string[]{"aaaaaa","bbbbb","cccccc"}; //声明一个数组

    string[]strList =Array.FindAll(strLists,s=>(s.IndexOf("a")>=0)); //声明一个数组对象,找到 “a” 出现次数大于1的

    我们可以看到Lambad的一个语法规则, (输入参数 =>(规则,表示操作符)  操作表达式  )

    再看Linq的遍历输出

    同样,声明一个数组

    string[] strLists = new string[]{"aaaaaa","bbbbb","cccccc"}; //声明一个数组

    foreach(string item in strLists)

    {//方法体...}

    如果操作一次遍历操作多个数组,如何操作?

    string[] strLists1 = new string[]{"aaaaaa","bbbbb","cccccc"}; //声明第一个数组

    string[] strLists2= new string[]{"11111","22222","333333"}; //声明第二个数组

    foreach(string item in strLists1.Concat<string>(strLists2))

    {//方法体...}

    下面继续介绍Linq.join 类似于多表查询,不同的是,Linq.join 是操作Object对象的

    假设strLists1  strLists2 这两个数据集的外键为 ID ,s1 属性为姓名 s2属性为性别

    var query =strLists1.Join(strLists2

    s1=>s1.ID, s2=>s2.ID,

    (s1,s2)=>new{

    姓名=s1.name,

    性别=s2.sex

    });

    该方法等同于

    var query = from s1 in strList1 join p in strList2 on s1.ID equals s2.ID

    select new {

    姓名=s1.name,

    性别=s2.sex

    };

    这样,一个简单实用的linq多表连接查询出来了

    在取单集合的时候,我们也可以这么写, from p in str1 select {...} 也可以用Lambada写法,

    string str = strList1.Where(itm=>itm.ProductName=="aaaaa")

    这里注释一下: Linq对数据操作的时候, 如果是List<t>类型, 使用Linq会自动转换为 IEnumerable类型,如果想再转回来, 后面加一句  .ToList() 即可

    在使用上,很多和数据库操作类似,不过是语法有了一点点改变而已。

    包括了聚合、Sum操作、Max操作、Min操作、Average操作、Aggregate操作、集合操作等等......

    接下来,分享一下EF和Linq之间不得不说的小秘密

    EF所提供的关系对象模型,提供了一个可视化的设计页面,还生成了一个强类型DataContext上下文类,将存储过程和函数映射到DataContext,返回数据和填充实体类。

    其他的和上面所述操作性上,并无很大差别, 知识每次引用数据操作,必须使用声明的实体类操作对象,比如

    private DataEntityContext db =new DataEntityContext ();

    db.change(); 这个就包含了增删改。

    今天就写这么多了,后面的应用,留到下次再说。 谢谢各位的收看。

  • 相关阅读:
    【开学季】自学嵌入式开发|四核开发板|4412开发板|ARM+Android+linux技术
    迅为4412开发板Linux驱动教程——总线_设备_驱动注册流程详解
    【嵌入式开发板】8月终极暑促迅为Cortex-a9四核入门开发板
    [资料分享]迅为iTOP4412开发板-SDIO WiFi移植文档
    [leetcode] 905. Sort Array By Parity [easy]
    [leetcode] 106. Construct Binary Tree from Inorder and Postorder Traversal(medium)
    [leetcode] 4. Median of Two Sorted Arrays
    [leetcode] 3. Longest Substring Without Repeating Characters
    [leetcode] 105. Construct Binary Tree from Preorder and Inorder Traversal (Medium)
    [leetcode] 110. Balanced Binary Tree (easy)
  • 原文地址:https://www.cnblogs.com/29boke/p/5070260.html
Copyright © 2011-2022 走看看