linq查询语法和方法

1. Select

Select操作符对单个序列或集合中的值进行投影。下面的示例中使用select从序列中返回Employee表的所有列:

  1. using (NorthwindDataContext db=new NorthwindDataContext())
  2. {
  3. //linq查询语法(基本语法)
  4. var query =
  5. from e in db.Employees
  6. where e.FirstName.StartsWith("M")
  7. select e;
  8. //linq方法语法(基本方法)
  9. var q =
  10. db.Employees
  11. .Where(e => e.FirstName.StartsWith("M"))
  12. .Select(e => e);
  13. foreach (var item in query)
  14. {
  15. Console.WriteLine(item.FirstName);
  16. }
  17. }

当然,你也可以返回单个列,例如:

  1. var query =
  2. from e in db.Employees
  3. where e.FirstName.StartsWith("M")
  4. select e.FirstName;

你也可以返回序列中的某几列,例如:

  1. var query =
  2. from e in db.Employees
  3. where e.FirstName.StartsWith("M")
  4. select new
  5. {
  6. e.FirstName,
  7. e.LastName,
  8. e.Title
  9. };

2. SelectMany

SelectMany操作符提供了将多个from子句组合起来的功能,它将每个对象的结果合并成单个序列。下面是一个示例:

  1. using (NorthwindDataContext db=new NorthwindDataContext())
  2. {
  3. //查询语法
  4. var query =
  5. from e in db.Employees
  6. from o in e.Orders
  7. select o;
  8. //方法语法
  9. var q =
  10. db.Employees
  11. .SelectMany(e => e.Orders);
  12. foreach (var item in query)
  13. {
  14. Console.WriteLine(item.Freight);
  15. }
  16. }

二、限制操作符

Where是限制操作符,它将过滤标准应用在序列上,按照提供的逻辑对序列中的数据进行过滤。

Where操作符不启动查询的执行。当开始对序列进行遍历时查询才开始执行,此时过滤条件将被应用到查询中。Where操作符的使用方法已经在第一节中出现过,这里不再冗述。

三、排序操作符

排序操作符,包括OrderBy、OrderByDescending、ThenBy、ThenByDescending和Reverse,提供了升序或者降序排序。

1. OrderBy

OrderBy操作符将序列中的元素按照升序排列。下面的示例演示了这一点:

  1. using (NorthwindDataContext db = new NorthwindDataContext())
  2. {
  3. //查询语法
  4. var query =
  5. from e in db.Employees
  6. orderby e.FirstName
  7. select e;
  8. //方法语法
  9. var q =
  10. db.Employees
  11. .OrderBy(e => e.FirstName)
  12. .Select(e => e);
  13. foreach (var item in q)
  14. {
  15. Console.WriteLine(item.FirstName);
  16. }
  17. }

这里可以使用OrderBy的重载方法OrderBy(Func,IComparer)来指定序列的排序方式。

2. OrderByDescending

OrderByDescending操作符将序列中的元素按照降序排列。用法与OrderBy相同,这里不再演示。

3. ThenBy

ThenBy操作符实现按照次关键字对序列进行升序排列。此操作符的查询语法与方法语法略有不同,以下代码演示了这一点:

  1. using (NorthwindDataContext db = new NorthwindDataContext())
  2. {
  3. //查询语法
  4. var query =
  5. from e in db.Employees
  6. orderby e.FirstName,e.LastName
  7. select e;
  8. //方法语法
  9. var q =
  10. db.Employees
  11. .OrderBy(e => e.FirstName)
  12. .ThenBy(e => e.LastName)
  13. .Select(e => e);
  14. foreach (var item in query)
  15. {
  16. Console.WriteLine(item.FirstName);
  17. }
  18. }

4. ThenByDescending

ThenByDescending操作符实现按照次关键字对序列进行降序排列。此操作符的查询语法与方法语法略有不同,以下代码演示了这一点:

  1. using (NorthwindDataContext db = new NorthwindDataContext())
  2. {
  3. //查询语法
  4. var query =
  5. from e in db.Employees
  6. orderby e.FirstName,e.LastName descending
  7. select e;
  8. //方法语法
  9. var q =
  10. db.Employees
  11. .OrderBy(e => e.FirstName)
  12. .ThenByDescending(e => e.LastName)
  13. .Select(e => e);
  14. foreach (var item in query)
  15. {
  16. Console.WriteLine(item.FirstName);
  17. }
  18. }

5. Reverse

Reverse将会把序列中的元素按照从后到前的循序反转。需要注意的是,Reverse方法的返回值是void,以下代码演示了这一点:

    1. using (NorthwindDataContext db = new NorthwindDataContext())
    2. {
    3. //方法语法
    4. var q =
    5. db.Employees
    6. .Select(e => e.FirstName)
    7. .ToList();
    8. q.Reverse();
    9. foreach (var item in q)
    10. {
    11. Console.WriteLine(item);
    12. }
    13. }
时间: 2024-11-01 03:37:43

linq查询语法和方法的相关文章

LINQ:开始使用 LINQ(五)- LINQ 中的查询语法和方法语法

开始使用 LINQ(五)- LINQ 中的查询语法和方法语法 在表示语言集成查询 (LINQ) 使用 LINQ 性查询语法,文档中的多数查询编写.但是,编译代码时,必须将查询语法转换为方法,这就需要 .NET 公共语言运行时 (CLR).这些方法调用标准查询运算符的名称类似 Where.Select.GroupBy.Join.Max和 Average.可以调用这些方法直接使用方法语法而不是查询语法. 查询语法和方法语法语义相同,但是,许多人员发现查询语法更简单.更易于阅读.某些查询必须表示为方法

LINQ查询语法

一.LINQ查询时又两种语法可供选择:方法语法(Fluent Syntax)和查询语法(Query Expression) 1.方法语法:本质是通过扩展方法和Lambda表达式来创建查询 3.查询语法:查询比较类似于SQL查询 关系:.NET公共语言运行库(CLR)并不具有查询语法的概念.所以,编译器会在程序编译时把查询表达式转换为方法语法,即对扩展方法的调用.所以使用方法语法会让我们更加接近和了解LINQ的实现和本质,并且一些查询只能表示为方法调用,如检索序列中的最大值.最小值元素的查询,他们

LINQ查询中常见方法

1.分组连接 格式:From elementA in dataSourceA join elementB in dataSourceB on exp1 equals exp2 into grpName 例:From book in Books join author in Authors on book.id equals author.id into result 意义:遍历Books集合中的每个对象,并将book中的book.id与Authors集合中的每个author中的author.id

C#高级知识点概要(3) - 特性、自动属性、对象集合初始化器、扩展方法、Lambda表达式和Linq查询

1.特性(Attributes) 特性(Attributes),MSDN的定义是:公共语言运行时允许你添加类似关键字的描述声明,叫做attributes, 它对程序中的元素进行标注,如类型.字段.方法和属性等.Attributes和Microsoft .NET Framework文件的元数据保存在一起,可以用来向运行时描述你的代码,或者在程序运行的时候影响应用程序的行为.例如,在一个方法前标注[Obsolete]特性,则调用该方法时VS则会提示该方法已过期的警告,如下图: 又如,在.Net Re

Linq 查询 与方法调用

通常,使用linq查询时需要一个实现IQueryable<T> 的查询对象 public class DataA<T> : IQueryable<T> {....} 之后通过 var q = from c in new DataA<int>() where c > 0 select new { a = c.ToString() }; 进行查询,使用IQueryProvider  收集用户输入的表达式进行处理. 但是查询本身实际上只关注查询对象上有无可用

LINQ查询操作符

一.投影操作符 1. Select Select操作符对单个序列或集合中的值进行投影.下面的示例中使用select从序列中返回Employee表的所有列: using (NorthwindDataContext db=new NorthwindDataContext()) { //查询语法 var query = from e in db.Employees where e.FirstName.StartsWith("M") select e; //方法语法 var q = db.Em

LINQ之路 5:LINQ查询表达式

书写LINQ查询时又两种语法可供选择:方法语法(Fluent Syntax)和查询表达式(Query Expression). LINQ方法语法的本质是通过扩展方法和Lambda表达式来创建查询.C# 3.0对于LINQ表达式还引入了声明式的查询表达式,也叫查询语法,通常来讲,它是创建LINQ查询的更加快捷的方式.尽管通过查询语法写出的查询比较类似于SQL查询,但实际上查询表达式的产生并不是建立在SQL之上,而是建立在函数式编程语言如LISP和Haskell中的list comprehensio

C#语法之Linq查询基础二

上篇C#语法之Linq查询基础一基本把Linq介绍了一下,这篇主要是列举下它的几个常见用法. 在用之前先准备些数据,新建了两个类Student.Score,并通过静态方法提供数据. using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace LinqDemo { public class Student {

LINQ to Objects系列(2)两种查询语法介绍

LINQ为我们提供了两种查询语法,分别是查询表达式和查询方法语法.这篇文章分为以下几个方面进行总结. 1,一个包含两种查询语法的简单示例 2,查询表达式的结构 3,查询方法相关的运算符 一个包含两种查询语法的简单示例 一个LINQ查询既可以使用查询表达式实现,也可以用查询方法实现,还可以同时组合两种查询.下面是一个简单的示例,代码如下. namespace LINQDemo3 { class Program { static void Main(string[] args) { int[] nu