zoukankan      html  css  js  c++  java
  • Linq入门

    为啥会有LINQ,主要还是因为现在的数据格式越来越多,数据库、XML、数组、哈希表……每一种都有自己操作数据的方式,学起来费事费力。于是,就有了LINQ 诞生的理由——以一种统一的方式操作各种数据源,减少数据访问的复杂性。LINQ 目前可以对XML, Object, SQL 做数据访问,今后还会有LINQ to Entity的功能。说来惭愧,我也是刚刚才接触LINQ,先从最简单的开始吧,先来看以下代码。

    1 MethodInfo[] methods = typeof(StringBuilder).GetMethods();
    2 var result = from m in methods where m.IsStatic == false select m.Name;
    3 var res = (from m in methods where m.IsStatic != true select m.Name).Distinct();
    4 var result2 = from m in methods where m.IsStatic != true
    5 group m by m.Name into g select new { MethodName = g.Key, Overload = g.Count() }; //匿名类
    6   MyClass mc = new MyClass { Methods = "myMethod", Overload = 1 };
    7 foreach (var r in result2)
    8 {
    9 Console.WriteLine(r);
    10 }
    11 Console.ReadKey();

    看起来,有点像javascript 里面的弱类型的变量声明。但是,C#是强类型的,尽管你用var 来声明,编译器还是可以根据上下文推倒出它当前的类型。比如这个例子里面,result 就是IEnumerable 类型的。在这里面,写IEnumerable 和写var 是一样效果的,显然,var 会简单得多。你不用考虑数据操作的返回值是什么类型,还能享受强类型声明带来的方便实惠。还有from m in methods 这句,m 是什么东西,m 是隐式声明的一个变量,尽管没有声明,但编译器根据上下文,推断出它的类型是MethodInfo 型的!.NETFramework 3.5 的编译器的确是聪明了很多。纯粹给懒人用的var 关键字,告诉编译器(对于CLR 来说,它是不会知道你是否使用了var,苦力是编译器出的),你自己推断它的类型吧,我不管了。但是既然让编译器推断类型就必须声明的时候赋值,而且不能是null 值。注意,这只能用于局部变量,用于字段是不可以的。

    Lambda 表达式:
    var list = new [] { "aa", "bb", "ac" };
    var result = Array.FindAll(list, s => (s.IndexOf("a") > -1));
    foreach (var v in result)
      Console.WriteLine(v);
    其实和2.0 中的匿名方法差不多,都是用于产生内联方法,只不过Lambda
    表达式的语法更为简洁。语法如下:
    (参数列表) => 表达式或者语句块
    其中:
    参数个数:可以有多个参数,一个参数,或者无参数。

    参数个数:可以有多个参数,一个参数,或者无参数。
    表达式或者语句块:这部分就是我们平常写函数的实现部分(函数体)。
    前面的示例分别是1 个参数的例子,下面结合扩展方法来一个复杂的例子:
    public delegate int mydg(int a, int b);
    public static class LambdaTest
    {
      public static int oper(this int a, int b, mydg dg)
      {
        return dg(a, b);
      }
    }
    Console.WriteLine(1.oper(2, (a, b) => a + b));
    Console.WriteLine(2.oper(1, (a, b) => a - b));

    再来看如下查询例子:

                var persons = new List<Person> { new Person { username = "a", age = 19 },
                            new Person { username = "b", age = 20 },
                            new Person { username = "a", age = 21 } };
                var selectperson = from p in persons where p.age >= 20 select p.username.ToUpper();
                foreach (var p in selectperson)
                    Console.WriteLine(p);

        public class Person
        {
            public string username { get; set; }
            public int age { get; set; }
        }
    查询句法是使用标准的LINQ 查询运算符来表达查询时一个方便的声明式简化写法。该句法能在代码里表达查询时增进可读性和简洁性,读起来容易,也容易让人写对。Visual Studio 对查询句法提供了完整的智能感应和编译时检查支持。

    初步入门到此。。。

  • 相关阅读:
    JS—ajax及async和defer的区别
    js-cookie和session
    h5小功能_classList和自定义属性data
    html5-attr和prop
    人工智能与金融
    IBM的人工智能“沃森”首次确诊罕见白血病,只用了10分钟!
    终极复制 人工智能将如何推动社会巨变
    对人工智能问题的提问
    人工智能预测精神病
    人工智能代替工人
  • 原文地址:https://www.cnblogs.com/lys_013/p/1854346.html
Copyright © 2011-2022 走看看