zoukankan      html  css  js  c++  java
  • 【C#】Linq to Object

    本文将讲述C#中的Linq技术。


    一:linq是什么? 

    linq可以理解为嵌入C#语法的强类型查询语言。(注意:尽管linq看起来和Sql查询很像,但语法却不相同。)

    二:linq的作用?
    提供一种统一且对称的方式,让程序员得到数据和操作数据(此处的数据可以是XML,DataSet,物理数据等) 

    三:linq可应用在哪些场景?
    Linq to Object、Linq to XML、Linq to DataSet、Linq to Entities、Parallel Linq(并行处理linq查询返回的数据)

    linq的基本语法:var result = from item in container select item; 

    linq获取数据子集: var result = from item in container where booleanexpression select item;
     

     linq to object 例子

    static void QueryStrings()
    {
    string[] games = { "Morrowind", "Uncharted 2", "Fallout 3", "Daxter", "Shock2" };
    //构建一个查询表达式(注意:ling表达式在迭代内容之前,他们不会真正的运行计算)//linq此时还没有运算
    //linq查询的结果集,应该总是使用隐式类型,在绝大数情况下,真正的返回值实现了泛型 IEnumerable<T>接口的类型
    var subset = from g in games where g.Contains(" ") orderby g select g;
    //上面代码也可以写成 IEnumerable<string> subset = from g in games where g.Contains(" ") orderby g select g;
    //输出结果。在迭代的时候才运算(这叫:延迟执行)
    foreach (string s in subset)
    {
    Console.WriteLine(
    "含有空格的是:{0}",s);
    }
    }

    linq在迭代外运算例子:

    //在foreach逻辑外运算linq
    static void QueryInt()
    {
    //如果希望在foreach逻辑外表运算Linq表达式,可以调用有Enumerable类型定义的扩展方法。如ToArray<T>()、ToList<T>()等。
    int[] numbers = { 2, 10, 30, 15, 1, 22 };
    //立即获取数据
    int[] rst =( from i in numbers where i >10 orderby i select i).ToArray<int>();

    }

    linq查询中的常用函数
    1.count<T>() 获取linq查询表达式返回的项数

    static void FunLinq()
    {
    int[] numbers = { 2, 10, 30, 15, 1, 22 };
    //输出大于10的总数
    int count = (from i in numbers where i > 10 orderby i select i).Count<int>();
    Console.WriteLine(count);//输出:3
    }

     2.Reverse<T>对linq结果集中的项进行反转

    var newnumbers = from i in numbers select i;
    foreach (var p in numbers.Reverse())
    {
    Console.WriteLine(p);
    //输出22 1 15 30 10 2
    }

    3.orderby 对linq进行排序,默认是正序

    //排序(正序)
    string[] games = { "Morrowind", "Uncharted 2", "Fallout 3", "Daxter", "Shock2" };
    var newn
    = from i in games orderby i ascending select i;
    foreach (var p in games)
    {
    Console.Write(p
    +",");//
    }
    4.Distinct()移除数据中的重复项目
    //排序(正序)
    string[] games = { "Morrowind", "Uncharted 2", "Fallout 3", "Daxter", "Shock2", "Shock2"};
    var newn
    = from i in games orderby i ascending select i;
    foreach (var p in games.Disinct())
    {
    Console.Write(p
    +",");//
    }

    5.聚合操作

    //聚合操作
    //最大值
    var maxi =( from i in games orderby i ascending select i).Max();
    //最小值
    var mini = (from i in games orderby i ascending select i).Min();
    //平均值
    var avar = (from i in numbers orderby i ascending select i).Average();
    //总和
    var sum = (from i in numbers orderby i ascending select i).Sum();

  • 相关阅读:
    读取STL模型 并用opengl显示
    金币阵列问题
    字典序问题的解决方案
    opengl中的旋转与平移
    copy文件夹,通过C++读取系统、用户名以及计算机名的方法
    poj3032
    菲涅尔反射(Fresnel Reflection)
    几个稍大场景的渲染测试
    Ward BRDF实现心得
    离线渲染中的不规则光源(Meshlight)
  • 原文地址:https://www.cnblogs.com/zhxhdean/p/2090960.html
Copyright © 2011-2022 走看看