LINQ标准查询运算符

标准查询运算符:

标准查询运算符是一组方法,提供包括筛选where、投影select、聚合(例如max)、排序order by等在内的查询功能。

    string sentence = "the quick brown fox jumps over the lazy dog";
            string[] words = sentence.Split(‘ ‘);

            var query = from word in words
                        group word.ToUpper() by word.Length into gr
                        orderby gr.Key
                        select new { Length = gr.Key, Words = gr };

            //与上面表达同一种意思的方法调用写法
            var query1 = words.GroupBy(x => x.Length, w => w.ToUpper())
                .OrderBy(o => o.Key)
                .Select(p => new { Length = p.Key, Words = p });

各个标准查询运算符在执行时间上有所不同, 返回单一值的方法例如Max、Sum会立即执行,返回值序列的延迟执行。

运算符对应的查询表达式:

Cast方法 public static System.Collections.Generic.IEnumerable<TResult> Cast<TResult> (this System.Collections.IEnumerable source);

例如 from string fruit in fruits

System.Collections.ArrayList fruits = new System.Collections.ArrayList();
fruits.Add("mango");
fruits.Add("apple");
fruits.Add("lemon");
//查询表达式
var query = from string fruit in fruits
            orderby fruit
            select fruit;//方法调用IEnumerable<string> query1 =    fruits.Cast<string>().OrderBy(fruit => fruit).Select(fruit => fruit);

GroupBy方法 group ... by ... 或 group ... by ... into ...

GroupJoin分组联接方法  join ... in ... on ... equals ... into ...

namespace ConsoleApp4
{
    class Program
    {
        static void Main(string[] args)
        {
            Person magnus = new Person { Name = "Hedlund, Magnus" };
            Person terry = new Person { Name = "Adams, Terry" };
            Person charlotte = new Person { Name = "Weiss, Charlotte" };

            Pet barley = new Pet { Name = "Barley", Owner = terry };
            Pet boots = new Pet { Name = "Boots", Owner = terry };
            Pet whiskers = new Pet { Name = "Whiskers", Owner = charlotte };
            Pet daisy = new Pet { Name = "Daisy", Owner = magnus };

            List<Person> people = new List<Person> { magnus, terry, charlotte };
            List<Pet> pets = new List<Pet> { barley, boots, whiskers, daisy };

            //join … in … on … equals … into …   查询表达式
            var query = from person in people
                        join pet in pets on person equals pet.Owner into petGroup
                        select new { OwnerName = person.Name, Pets = petGroup.Select(p=>p.Name) };
        //方法调用
            var query1 = people.GroupJoin(pets,
                person => person,
                 pet => pet.Owner,
                 (person, petCollection) =>
                 new
                 {
                     OwnerName = person.Name,
                     Pets = petCollection.Select(pet => pet.Name)
                 }
                );

            Console.WriteLine(" 查询表达式 :");
            foreach (var obj in query)
            {
                // Output the owner‘s name.
                Console.WriteLine("{0}:", obj.OwnerName);
                // Output each of the owner‘s pet‘s names.
                foreach (string pet in obj.Pets)
                {
                    Console.WriteLine("  {0}", pet);
                }
            }

            Console.WriteLine(" 方法调用 :");
            foreach (var obj in query1)
            {
                // Output the owner‘s name.
                Console.WriteLine("{0}:", obj.OwnerName);
                // Output each of the owner‘s pet‘s names.
                foreach (string pet in obj.Pets)
                {
                    Console.WriteLine("  {0}", pet);
                }
            }
        }
    }

    class Person
    {
        public string Name { get; set; }
    }

    class Pet
    {
        public string Name { get; set; }
        public Person Owner { get; set; }
    }
}

Join方法 join...in...on...equals...

SelectMany 方法将序列的每个元素投影到 IEnumerable<T> 并将结果序列合并为一个序列。

SelectMany方法对应复合from查询表达式

namespace ConsoleApp4
{
    class Program
    {
        static void Main(string[] args)
        {
            PetOwner[] petOwners =
        { new PetOwner { Name="Higa",
              Pets = new List<string>{ "Scruffy", "Sam" } },
          new PetOwner { Name="Ashkenazi",
              Pets = new List<string>{ "Walker", "Sugar" } },
          new PetOwner { Name="Price",
              Pets = new List<string>{ "Scratches", "Diesel" } },
          new PetOwner { Name="Hines",
              Pets = new List<string>{ "Dusty" } } };

            var query1 = from owner in petOwners
                         from pet in owner.Pets
                         select new { petOwner = owner.Name, petName = pet };

            foreach (var obj in query1)
            {
                Console.WriteLine(obj);
            }

            Console.WriteLine("方法调用结果:");

            var query =
                petOwners
                .SelectMany(petOwner => petOwner.Pets, (petOwner, petName) => new { petOwner.Name, petName })
               ;

            // Print the results.
            foreach (var obj in query)
            {
                Console.WriteLine(obj);
            }
        }
    }

    class PetOwner
    {
        public string Name { get; set; }
        public List<string> Pets { get; set; }
    }
}

OrderBy 、OrderByDescending、ThenByDescending 、ThenBy等排序方法对应表达式orderby...descending/ascending(默认)。

Where方法对应where....

原文地址:https://www.cnblogs.com/bibi-feiniaoyuan/p/12364729.html

时间: 2024-10-23 21:29:18

LINQ标准查询运算符的相关文章

.NET中那些所谓的新语法之四:标准查询运算符与LINQ

开篇:在上一篇中,我们了解了预定义委托与Lambda表达式等所谓的新语法,这一篇我们继续征程,看看标准查询运算符和LINQ.标准查询运算符是定义在System.Linq.Enumerable类中的50多个为IEnumerable<T>准备的扩展方法,而LINQ则是一种类似于SQL风格的查询表达式,它们可以大大方便我们的日常开发工作.因此,需要我们予以关注起来! /* 新语法索引 */ 1.自动属性 Auto-Implemented Properties 2.隐式类型 var 3.参数默认值 和

十四、C# 支持标准查询运算符的集合接口

支持标准查询运算符的集合接口. System.Linq.Enumeralbe类提供的一些常用的API 来执行集合处理 1.匿名类型 2.隐匿类型的局部变量 3.集合初始化器 4.集合 5.标准查询运算符 本章主要讨论泛型集合接口. 非泛型的集合类,待查. 一.匿名类型和隐式类型的局部变量声明 C#3.0增强. 1.匿名类型 一种特殊的数据类型,它最终是由编译器声明的,而非通过已定义好的类来声明的. 和匿名函数相似,当编译器看到一个匿名类型时,会自动执行一些后台操作,生成必要的代码, 允许像显式声

Linq 标准查询操作符三

本文介绍了LINQ标准查询操作符.没有这些操作符,LINQ就不会存在.本文为理解这些操作符的功能提供了很好的基础.了解它们将会很有帮助,因为LINQ的各种Provider都是基于这些操作符来完成各自丰富的功能. 一.投影操作符 1. Select Select操作符对单个序列或集合中的值进行投影.下面的示例中使用select从序列中返回Employee表的所有列: using (NorthwindDataContext db = new NorthwindDataContext()) { //查

LINQ标准查询操作符(四)—AsEnumerable,Cast,OfType,ToArray,ToDictionary,ToList,ToLookup,First,Last,ElementAt

本文来自:http://blog.csdn.net/xuejianwu/article/details/6931926 十.转换操作符 转换操作符是用来实现将输入对象的类型转变为序列的功能.名称以“As”开头的转换方法可更改源集合的静态类型但不枚举(延迟加载)此源集合.名称以“To”开头的方法可枚举(即时加载)源集合并将项放入相应的集合类型. 1. AsEnumerable 所有实现了IEnumerable<T>接口的类型都可以调用此方法来获取一个IEnumerable<T>集合.

LINQ标准查询操作符详解(转)

 一. 关于LINQ       LINQ 英文全称是“Language-Integrated Query”,中文为“语言集成查询”,它是微软首席架构师.Delphi 之父和C# 之父——Anders Hejlsberg 提出的并由其团队着力打造的一组用于c#和Visual Basic语言的扩展,为 C# 和 Visual Basic 语言语法提供强大的查询功能.微软从2003年开始启动LINQ的开发,在VisualStudio2008中开始加入LINQ功能. LINQ提供的便利: 1)使用一种

Linq常用查询运算符

Linq一共包含五十几个查询运算符,常用的根据类型来区分一共有5类左右,这五类里面一些事在项目查询中经常用到的.不过linq运算符的命名十分规范,基本从字面意思就能猜测出来是干嘛用的,下面我们挑选一些常用的来介绍一下.根据分类我们能分成下面4种类型: 1.返回IEnumerable<T>类型的 1.1 Where:主要用于对于序列的筛选,跟在sql中对数据筛选用法是一样的 1 int[] array = { 1, 3, 5, 7, 2 }; 2 var query = array.Where(

LINQ标准查询操作符(三)——Aggregate、Average、Distinct、Except、Intersect、Union、Empty、DefaultIfEmpty、Range、Repeat

本文来自:http://blog.csdn.net/xuejianwu/article/details/6931903 七.聚合操作符 聚合函数将在序列上执行特定的计算,并返回单个值,如计算给定序列平均值.最大值等.共有7种LINQ聚合查询操作符:Aggregate.Average.Count.LongCount.Max.Min和Sum. 1. Aggregate Aggregate操作符对集合值执行自定义聚合运算.例如,需要列出所有产品类别清单,每个类别名称之间用顿号连接.以下的代码演示了这一

linq之延迟加载和即时加载+标准查询运算符

延迟加载 Linq查询的执行结果是IEnumerable<T>类型,而对IEnumerable<T>,在内部,C#通过yield关键字实现迭代器达到延迟加载的目的.从而使Linq查询只是在需要的时候才会被执行.  where Where方法是一个典型的延迟加载案例,在EF的框架中,where方法每次调用都在是在后续生成SQL语句时增加查询条件,EF无法确定本次查询是否已经添加结束,所以没有在方法执行的时候最终确定SQL语句,只能返回一个DbQuery对象,当用这个对象的时候,才会最

标准查询运算符---LINQ

Where 根据给定的谓词对序列进行过滤 Select 指定要包含一个对象或对象的一部分 SelectMany 一种查询类型,返回集合的集合.该方法将这些结果合并为一个单独的集合 Take 接受一个输入参数COUNT,返回序列中的前count个对象 skip 接受一个输入参数count,跳过序列中的前count个对象 TakeWhile 接受一个谓词,开始迭代该序列,只要谓词对当前想的计算结果为true,就选择该项.在谓词返回第一个false的时候,该项和其余项都被丢弃 原文地址:https:/