LINQ 简单使用

作者: JeetChan | 来源:发表于2019-05-03 01:18 被阅读0次

语言集成查询 (LINQ)

LINQ(Language Integrated Query)语言集成查询是一组用于 C# 和 Visual Basic 语言的扩展。它允许编写 C# 或者 Visual Basic 代码以操作内存数据的方式,查询数据库。LINQ 要求数据用实现了 IEnumerable 或 IEnumerable<T> 接口的数据结构进行存储。

linqsyntax.png

LINQ 简单使用

练习数据

       class Product
       {
           public string Name { get; set; }
           public int CategoryID { get; set; }
       }

       class Category
       {
           public string Name { get; set; }
           public int ID { get; set; }
       }

       // Specify the first data source.
       var categories = new List<Category>()
       { 
           new Category(){Name="Beverages", ID=001},
           new Category(){ Name="Condiments", ID=002},
           new Category(){ Name="Vegetables", ID=003},
           new Category() {  Name="Grains", ID=004},
           new Category() {  Name="Fruit", ID=005}            
       };

       // Specify the second data source.
       var products = new List<Product>()
      {
         new Product{Name="Cola",  CategoryID=001},
         new Product{Name="Tea",  CategoryID=001},
         new Product{Name="Mustard", CategoryID=002},
         new Product{Name="Pickles", CategoryID=002},
         new Product{Name="Carrots", CategoryID=003},
         new Product{Name="Bok Choy", CategoryID=003},
         new Product{Name="Peaches", CategoryID=005},
         new Product{Name="Melons", CategoryID=005},
       };

选择(投影)

var categoryNames = categories.Select(category => category.Name);

foreach (var categoryName in categoryNames)
{
    Console.WriteLine(categoryName);
}

筛选

var categoryQuery = categories.Where(category => category.ID > 002);
foreach (var category in categoryQuery)
{
    Console.WriteLine($"categoryName:{category.Name},categoryID:{category.ID}");
}

排序

var categoryOrdering = categories.OrderByDescending(category => category.ID);

foreach (var category in categoryOrdering)
{
    Console.WriteLine($"categoryName:{category.Name},categoryID:{category.ID}");
}

分组

var productGrouping = products.GroupBy(product => product.CategoryID);

foreach (IGrouping<int, Product> ProductGroup in productGrouping)
{
    Console.WriteLine($"ProductGroupKey:{ProductGroup.Key}");
    foreach (var product in ProductGroup)
    {
        Console.WriteLine($"ProductName:{product.Name},CategoryID:{product.CategoryID}");
    }

}

联接

var joinQuery = categories.Join(products, category => category.ID,
      prod => prod.CategoryID,
      (category, prod) =>
         new
         {
             ProductName = prod.Name,
             Category = category.Name
         }
   );

    foreach (var joinData in joinQuery)
    {
        Console.WriteLine($"ProductName:{joinData.ProductName},Category:{joinData.Category}");
    }

强制立即生成 LINQ 查询结果

使用 ToList 或 ToArray 方法生成包含结果的列表或数组。

var productQuery = from product in products.ToList<Product>() where product.CategoryID == 3 select product;

小结

以上大部分是基于 Fluent Syntax 的最简单 LINQ 应用,另一种形式是使用查询操作符,如“筛选”可用下列方式改写:

var categoryQuery2 = from category in categories where category.ID > 002 select category;

最后,如需详细了解 LINQ,请参阅官方文档,Docs /.NET /C# 指南 /编程指南 /编程概念 /LINQ:https://docs.microsoft.com/zh-cn/dotnet/csharp/programming-guide/concepts/linq/

相关文章

  • Linq语句初接触

    在unity中简单的使用Linq语句

  • LINQ 简单使用

    语言集成查询 (LINQ) LINQ(Language Integrated Query)语言集成查询是一组用于 ...

  • 在 UiPath 中使用 LINQ

    在《LINQ 让数据操作更简单》一文中,我简单地介绍了 LINQ 是什么,以及它可以做什么。总的来说,LINQ 是...

  • C# Linq To SQL 简单使用

    第一步:在Model层下创建 Linq To Sql 第二步:添加引用 第三:注意事项 框子搭好了,可以按照下面这...

  • LINQ

    什么是linq? linq是语言集成查询。 linq主要包含三部分 linq to xml linq to obj...

  • Linq用法笔记

    一、什么是Linq? LINQ即Language Integrated Query(语言集成查询),LINQ是集成...

  • Lession12-LINQ

    LINQ简介 编写一个扩展方法 LINQ查询方法 LINQ查询的延迟加载 Linq标准查询操作符 LinqToXML

  • LINQ入门

    linq是语言集成查询。 linq to object :面向对象的查询。 linq to xml:针对xml查询...

  • .Net Core List 转 字符串

    List 转字符串 1. for 循环方式 2. 使用String.Join 3. 使用Linq

  • (转).NET面试题系列[14] - LINQ to SQL与I

    LINQ to Object和LINQ to SQL有何区别? LINQ to SQL可以将查询表达式转换为SQL...

网友评论

    本文标题:LINQ 简单使用

    本文链接:https://www.haomeiwen.com/subject/vxxanqtx.html