Linq to objects示例

与linq to sql类似,所有继承了IEnumerable的类型均可使用LINQ,如下string[]数组基类为Array,而Array实现了IEnumerable,所以也可使用linq

static void Main(string[] args)
        {
            string[] myWords = new string[] { "what", "is", "your", "name", "my", "name", "is" };
            var obj = from m in myWords
                      group m by m.Length into lengthgroups
                      orderby lengthgroups.Key
                      select new
                      {
                          length = lengthgroups.Key,
                          wordCollection = lengthgroups
                      };
            foreach (var item in obj)
            {
                Console.WriteLine("包含" + item.length + "个字符的单词有:");
                foreach (string stra in item.wordCollection)
                {
                    Console.WriteLine(stra);
                }
            }

 

 另一种写法:

 static void Main(string[] args)
        {
            string[] myWords = new string[] { "what", "is", "your", "name", "my", "name", "is" };
            var groups = myWords.GroupBy(o => o.Length);
            foreach (var item in groups)
            {
                Console.WriteLine("包含" + item.Key + "个字符的单词有:");
                foreach (string stra in item)
                {
                    Console.WriteLine(stra);
                }
            }

或者:

 static void Main(string[] args)
        {
            string[] myWords = new string[] { "what", "is", "your", "name", "my", "name", "is" };
            var groups = myWords.GroupBy(o => o.Length);
            foreach (IGrouping<int,string> item in groups)
            {
                Console.WriteLine("包含" + item.Key + "个字符的单词有:");
                foreach (string stra in item)
                {
                    Console.WriteLine(stra);
                }
            }

 获取序列中元素位置:

string[] myWords = new string[] { "what", "is", "your", "name", "my", "name", "is" };
            var words = myWords.Select((word, index) => { return new { index, word.Length, word, title = "aaa" }; }).OrderBy(o => o.Length);

Select方法有两种定义,这里用的是第一种,可以接受的是一个TSource和一个int类型的参数返回为自定义匿名类型的匿名方法

 //
        // 摘要:
        //     通过合并元素的索引将序列的每个元素投影到新表中。
        //
        // 参数:
        //   source:
        //     一个值序列,要对该序列调用转换函数。
        //
        //   selector:
        //     一个应用于每个源元素的转换函数;函数的第二个参数表示源元素的索引。
        //
        // 类型参数:
        //   TSource:
        //     source 中的元素的类型。
        //
        //   TResult:
        //     selector 返回的值的类型。
        //
        // 返回结果:
        //     一个 System.Collections.Generic.IEnumerable<T>,其元素为对 source 的每个元素调用转换函数的结果。
        //
        // 异常:
        //   System.ArgumentNullException:
        //     source 或 selector 为 null。
        public static IEnumerable<TResult> Select<TSource, TResult>(this IEnumerable<TSource> source, Func<TSource, int, TResult> selector);
        //
        // 摘要:
        //     将序列中的每个元素投影到新表中。
        //
        // 参数:
        //   source:
        //     一个值序列,要对该序列调用转换函数。
        //
        //   selector:
        //     应用于每个元素的转换函数。
        //
        // 类型参数:
        //   TSource:
        //     source 中的元素的类型。
        //
        //   TResult:
        //     selector 返回的值的类型。
        //
        // 返回结果:
        //     一个 System.Collections.Generic.IEnumerable<T>,其元素为对 source 的每个元素调用转换函数的结果。
        //
        // 异常:
        //   System.ArgumentNullException:
        //     source 或 selector 为 null。
        public static IEnumerable<TResult> Select<TSource, TResult>(this IEnumerable<TSource> source, Func<TSource, TResult> selector);

 

其实LINQ本质就是为IEnumerable接口扩展了一大堆静态泛型方法

转载于:https://www.cnblogs.com/Finding2013/archive/2013/04/24/3040655.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
LINQ to Objects(Language-Integrated Query,语言集成查询)是.NET Framework 3.5中引入的一种查询技术,它允许在C#和VB.NET等编程语言中直接使用类似于SQL的查询语法来操作对象集合。LINQ to Objects可以简化数据访问层的代码,提高开发效率。 LINQ to Objects的主要特点包括: 1. 声明性查询:可以使用简洁的语法编写查询,而无需关心底层的数据访问细节。 2. 延迟执行:查询只会在需要结果时才会执行,这有助于提高性能。 3. 支持多种查询操作:包括筛选、排序、投影、连接等。 4. 支持动态类型:LINQ to Objects可以处理各种类型的对象,无需进行类型转换。 以下是一个简单的LINQ to Objects示例: ```csharp using System; using System.Collections.Generic; using System.Linq; class Person { public int Id { get; set; } public string Name { get; set; } public int Age { get; set; } } class Program { static void Main() { List<Person> people = new List<Person> { new Person { Id = 1, Name = "张三", Age = 28 }, new Person { Id = 2, Name = "李四", Age = 32 }, new Person { Id = 3, Name = "王五", Age = 25 }, }; // 使用LINQ to Objects查询年龄大于等于30的人,并按年龄升序排列 var result = from person in people where person.Age >= 30 orderby person.Age ascending select person; // 输出查询结果 foreach (var person in result) { Console.WriteLine($"Id: {person.Id}, Name: {person.Name}, Age: {person.Age}"); } } } ``` 在这个示例中,我们首先创建了一个包含Person对象的列表,然后使用LINQ to Objects查询年龄大于等于30的人,并按年龄升序排列。最后,我们遍历查询结果并输出到控制台。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值