LINQ查询技术入门

LINQ简介

LINQ能够解决什么问题

在NET平台开发中,面向对象编程语言与数据访问方法长期分离,数据访问通过SQL进行查询,这种嵌入SQL语句的方式极容易出现错误。

SQL和XML都有各自的查询语言,而对象没有自己的查询语言。

再比如,要从List<T>集合或数组中找到符合要求的元素,非常困难。

什么是LINQ

LINQ(Language Integrated Query,语言集成查询)

LINQ主要包含以下三个部分:

  • LINQ to Objects主要负责对象的查询;
  • LINQ to XML主要负责XML的查询;
  • LINQ to ADO.NET主要负责数据库的查询;
    • (1)LINQ to SQL;
    • (2)LINQ to DataSet;
    • (3)LINQ to Entities;

LINQ所在命名空间

  • SyStem.Linq;该命名空间由系统自动引入。

使用和不使用LINQ查询的对比

  • 不使用LINQ

    #region 示例1:不使用LINQ查询
    int[] nums = { 1, 8, 2, 321, 82, 93, 288, 29 };
    List<int> list = new List<int>();
    foreach (int item in nums)
    {
        if (item %2 !=0)
        {
            list.Add(item);
        }
    }
    list.Sort();
    list.Reverse();
    foreach (int  item in list)
    {
        Console.WriteLine(item);
    }
    Console.ReadLine();
    #endregion
    
    • 使用LINQ查询

      #region 示例2:使用LINQ技术查询数组
      int[] nums = { 1, 8, 2, 321, 82, 93, 288, 29 };
      var list = from num in nums 
          where num % 2 != 0 
          orderby num descending
          select num;
      foreach (int item in list)
      {
          Console.WriteLine(item);
      }
      Console.ReadKey();
      #endregion
      

      LINQ查询简单、直观、明了。

    LINQ查询方法

    1. 获取数据:扩展方法Select()

      • Select()是一个泛型扩展方法,Select方法里面是一个Lambda表达式,返回结果是一个迭代器(Iterator
      • Select()方法使用的时候,要求传递一个委托实例(委托实例就是一个方法)

      Select()方法应用

      #region 示例3:Select()方法应用
      int[] nums = { 1, 8, 2, 321, 82, 93, 288, 29 };
      var list = nums.Select(item => item * item);
      foreach (int item in list)
      {
          Console.WriteLine(item);
      }
      Console.ReadKey();
      #endregion
      
    2. 筛选数据:Where()方法

      • Where()方法是一个泛型扩展方法
      • Where()方法使用的时候要求传递一个委托实列,但该实例是一个判断条件,因此返回的类型必需是bool类型

      Where()方法应用

      #region 示例4:Where()方法应用
      int[] nums = { 1, 8, 2, 321, 82, 93, 288, 29 };
      var list = nums.Where(item => item % 2 == 0).Select(i => i * i);
      foreach (int  item in list)
      {
          Console.WriteLine(item);
      }
      Console.ReadKey();
      #endregion
      
    3. 排序数据:OrderBy()方法

      • OrderBy()是一个扩展方法
      • OrderBy()里面的参数要求传递一个排序的字段,默认按照升序排列
      • 如果想降序排列可以使用OrderByDescending方法

      OrderBy()方法应用

      #region 示例5:OrderBy()方法应用
      int[] nums = { 1, 8, 2, 321, 82, 93, 288, 29 };
      var list = nums
          .Where(item => item % 2 == 0)
          .Select(i => i * i)
          .OrderByDescending(item => item);
      foreach (var item in list)
      {
          Console.WriteLine(item);
      }
      Console.ReadKey();
      #endregion
      

      字符串数组排序:

      #region 示例6:字符串排序
      string[] nums = { "张三", "李四", "王五器", "陈六", "钱七", "赵八" };
      var list = nums
          .Where(item => item.Length == 2)
          .Select(item => item)
          .OrderBy(item => item.Substring(0, 1));
      foreach (var item in list)
      {
          Console.WriteLine(item);
      }
      Console.ReadLine();
      #endregion
      
    4. 分组数据:GroupBy()方法

      • OrderBy()是一个扩展方法
      • OrderBy()里面的参数要求从传递一个分组的字段

      GroupBy()方法应用

      #region 示例7: GroupBy()方法应用
      string[] nums = { "张三", "李四", "王五器", "陈六", "钱七", "赵八" };
      var list = nums
            .Where(item => item.Length == 2)
            .Select(item => item)
            .GroupBy(item => item.Substring(0, 1));
      foreach (var groupitem in list)
      {
          Console.WriteLine("---------------");
          Console.WriteLine("分组字段:{0}", groupitem.Key);
          foreach (var item in groupitem) // 内层循环遍历分组项
          {
               Console.WriteLine(item);
          }
      }
      Console.ReadLine();
      # endregion
      

推荐这些技术文章:

C# 批量操作对象属性

class Test
{
public string Name { get; set; }
public int Age { get; set; }
}

List<Test> list = new List<Test>();
list.Add(new Test { Na...

EF 报LINQ to Entities 不支持 LINQ 表达式节点类型“Invoke”,在线求助!!!

问题
以下是我的代码片段:

Expression<Func<T_ZhaoBiaoInfo,bool>> whereExpr = PredicateExtensions.True<T_ZhaoBiaoInfo>();
if (!string.IsNullOrEmpty(category))
...

LINQ TO SQL子查询的问题

问题

DbNorthwind northwind = new DbNorthwind();Console.WriteLine("查询订单数超过5的顾客信息:");var result = from c in northwind.Customers where ( from o in northwind.Orders grou...

急急急!dictionary中如何通过value 来获取相应的key

问题
c#编程dictionary中如何通过value 来获取相应的key

最佳回答
Demo:

var dic = new Dictionary<string, int>()
{
{"a",1},
{"b",2},
{"c",3},
{"d",1}
};

foreach (var item ...

C#快速查找列表中重复项

var list = new List<string> {   "1","2","3","4","5","3" }; var datas = list.GroupBy(g => g).Where(w => w.Count() > 1).Select(s => s.K...

linq to sql 如何做 like 多个关键字?

问题
模糊匹配一组关键字  keywords[]
var list = from item in db...........
foreach(var k in keywords)list = from item in list where item.Name.Contains(k) select item;
这样生成sql之后,永远只有最后一个关键字传进去,而且这...

echarts图中动态加载、悬浮框(tooltip)中嵌套echarts

tooltip: {
  position: (point, params, dom, rect, size) => {
    var arr = Array.from(document.querySelectorAll(".c1"));
    var charArr = arr.map(item => echarts.init(item));
    var option1 =...

在 C# 中编写 LINQ 查询

一.查询语法
编写大多数查询的推荐方式是使用查询语法创建查询表达式。

// Query #1. List<int> numbers = new List<int>() { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };
// The query variable can also be implicitly typed by using ...

Linq取出一个集合中某区间的元素,怎么写?

问题
var items中的items是个排序后的集合,现在要取出其中第5到10之间的元素,请问用linq怎么写?

最佳回答
var list=(from item in items select item).Skip(5).Take(5)

...

给定一个数组 ['a','ab','abc','ab','ab','a','c','f','c'...]对数组进行排序按照出现次数由多到少 期望结果['ab', 'ab', 'ab', 'a', 'a', 'c', 'c', 'abc',

var arr = ['a','ab','abc','ab','ab','a','c','f','c']var b = []var a = arr.reduce((obj,item)=>{   if(obj[item]){     obj[item] += 1   }else{     obj[item] = 1   }   retu...

文章标题:LINQ查询技术入门
文章链接:https://www.dianjilingqu.com/3867.html
本文章来源于网络,版权归原作者所有,如果本站文章侵犯了您的权益,请联系我们删除,联系邮箱:saisai#email.cn,感谢支持理解。
THE END
< <上一篇
下一篇>>