c#中的linq

测试数据:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace LinqInfo
{
public class Stu
{
public int ID { set; get; } public string Name { get; set; } public string Tel { get; set; } public string Address { get; set; }
}
class Program
{
static void Main(string[] args)
{
List<Stu> list = new List<Stu>()
{
new Stu{ID=,Name="jack1",Tel="",Address="ChengDu"},
new Stu{ID=,Name="jack2",Tel="",Address="ChengDu2"},
new Stu{ID=,Name="jack3",Tel="",Address="ChengDu3"},
new Stu{ID=,Name="jack4",Tel="",Address="ChengDu4"},
new Stu{ID=,Name="jack5",Tel="",Address="ChengDu5"} };
var obj = new { ID=,Name="Tom" }; //匿名对象;
//然后我们来进行简单的linq的复习和使用滴呀
//借助于LINQ技术,我们可以使用一种类似SQL的语法来查询任何形式的数
//同一套LINQ语法,它能支持LINQ TO OBJECCT、LINQ TO XML、LINQ TO DATABASE。复用、减少开发工作量及降低学习成本等好处都是不言而喻的 Console.WriteLine();
}
}
}

当我们需要在集合中查询一些对象,数据的时候

            List<Stu> listNew = new List<Stu>();
//以前当我们要查询一个值的时候;
foreach(Stu s in list)
{
if(s.Name=="jack1")
{
listNew.Add(s);
}
}

或者你会这么写:

       //或者你会这么写;
static bool IsExist(Stu s)
{
return s.Name =="jack1";
} foreach (Stu s in list)
{
if (IsExist(s))
{
listNew.Add(s);
}
}

或者你会这么优化:

     public delegate bool ExistStu(Stu s);

        static List<Stu> GetList(IList<Stu> list, ExistStu fun)
{
List<Stu> listNew = new List<Stu>();
foreach (Stu s in list)
{
if (fun(s))
{
listNew.Add(s);
}
}
return listNew;
} //调用:
List<Stu> lis = GetList(list,IsExist);

再或者:

            //或者你你还可以使用匿名委托;
List<Stu> listInfo = GetList(list, delegate(Stu s) { return s.Name == "jack1" ? true : false; }); //或者你可以使用lambda表达式
List<Stu> listStu = GetList(list,p=>p.Name=="jack1");

然后就是扩展方法的使用:

    //然后是扩展方法;
public static class Helper
{
//申明委托;
public delegate bool ExistStu(Stu s); public static IList<Stu> GetList(this IList<Stu> listStu, ExistStu func)
{
List<Stu> result = new List<Stu>();
foreach (Stu s in listStu)
{
if (func(s))
{
result.Add(s);
}
}
return result;
} }
//然后是扩展方法的调用;
list.GetList(p => p.Name == "jack1"); //这样更直观更完美滴呀

当然,我们也可以将上面的方法扩展成泛型的;

public static class Helper2
{
public delegate bool Condition<T>(T t); public static IEnumerable<T> GetStuList<T>(this IEnumerable<T> items, Condition<T> condition)
{
foreach (T t in items)
{ if (condition(t))
{
yield return t; //yield 关键字的使用
}
}
} }

继续开发实例:

            //当我们需要赛选数据;
var temp=new List<Stu>();
if (list.Count > )
{
//以前我们会怎么写;
foreach (var obj in list)
{
if (obj.Name == "jack3")
{
temp.Add(obj);
}
}
} //现在我们可以优化这么写滴啊
var tempData = new List<Stu>();
if (list.Count > )
{
//先添加命名空间 using System.Linq;
tempData.AddRange(list.Where(obj=>obj.Name=="jack3"));
} //或则你可能会这么写滴呀;
var Names = new List<string>();
if (list.Count > )
{
foreach (var obj in list)
{
Names.Add(obj.Name); //再进一步的进行代码的优化的滴 呀;
}
} //然后你可以这么优化的滴呀
var nameList=new List<string>();
if (list.Any()) //你就可以这样使用any 来进行优化滴呀;
{
nameList.AddRange(list.Select(obj => obj.Name)); //也可以进行这样的基本优化地哎呀
}

这个就是我们优化之路滴呀;

c#中的linq一的更多相关文章

  1. C#中的Linq to Xml详解

    这篇文章主要介绍了C#中的Linq to Xml详解,本文给出转换步骤以及大量实例,讲解了生成xml.查询并修改xml.监听xml事件.处理xml流等内容,需要的朋友可以参考下 一.生成Xml 为了能 ...

  2. c#中的linq二

    c#中的linq二   using System; using System.Collections.Generic; using System.Linq; using System.Text; us ...

  3. Expert C# 5.0中的Linq部分

    1.先看看.NET中的Linq 2.扩展方法 3.Lambda表达式和表达式树 4.Linq中的延迟操作 5.Linq中的查询方法 5.1分割操作 5.2连接操作 5.3排序操作 5.4分组和连接 5 ...

  4. 在VB中使用Linq To SQLite注意事项

    昨天使Linq To SQLite 支持VB,今天在VB中写了几条Linq语句,发现了几个问题: 1.在Linq To SQLite中的Linq语句查询后并不是得到的匿名数据类,而是将Linq转换为S ...

  5. VB.NET中使用Linq TO SQL添加数据后获得自增长列ID

    VB.NET中使用Linq TO SQL添加数据后获得自增长列ID: Dim tempOrdre As New Order With { .CustomerID = cmbCustomerName.S ...

  6. 如何在C#中调试LINQ查询

    原文:How to Debug LINQ queries in C# 作者:Michael Shpilt 译文:如何在C#中调试LINQ查询 译者:Lamond Lu 在C#中我最喜欢的特性就是LIN ...

  7. LINQ查询表达式(2) - 在 C# 中编写 LINQ 查询

    在 C# 中编写 LINQ 查询 C# 中编写 LINQ 查询的三种方式: 使用查询语法. 使用方法语法. 组合使用查询语法和方法语法. // 查询语法 IEnumerable<int> ...

  8. C#在DataTable中使用LINQ

    LINQ 查询适用于实现的数据源 IEnumerable<T>接口或System.Query.IQueryable接口. DataTable类默认是没有实现以上接口的. 所以要在DataT ...

  9. C#中的LINQ

    从自己的印象笔记里面整理出来,排版欠佳.见谅!   1.LINQ: 语言集成查询(Language Integrated Query) 实例: var q=      from c in catego ...

随机推荐

  1. iOS中--NSArray调用方法详解 (李洪强)

    下面的例子以     NSArray *array = [NSArray arrayWithObjects:@"wendy",@"andy",@"to ...

  2. 转:值得推荐的C/C++框架和库(真的很强大)

    目录(?)[+] 值得学习的C语言开源项目 - 1 Webbench - 2 Tinyhttpd - 3 cJSON - 4 CMockery - 5 Libev - 6 Memcached - 7 ...

  3. 2015寒假ACM训练计划

    1月26号至3月4号 每天给自己一个计划.做有意义的事情,不要浪费时间. 8:00——11:30 acm训练 11:30——13:00 午休 13:00——17:30  acm训练 17:30——18 ...

  4. https资料

    1.HTTPS的七个误解   http://blog.httpwatch.com/2011/01/28/top-7-myths-about-https/ 中文 http://www.cnblogs.c ...

  5. 安装Bind过程中提示丢失MSVCR110.dll的解决办法

    前几天在线安装Visual Studio 2012 Update 3,由于在线安装需要不断下载安装文件,时间很长,后来等不下去,就取消了,不幸的是VS启动不了了,弹出“devenv.exe – 系统错 ...

  6. HDU 1430 魔板(康托展开+BFS+预处理)

    魔板 Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submis ...

  7. Web 在线文件管理器学习笔记与总结(10)查看文件夹中的内容

    ① 读取文件夹大小 a. 封装计算文件夹大小的函数 b.  打开文件夹 c. 循环判断文件夹下的内容是文件还是文件夹,如果是文件,则累积相加文件的大小:如果是文件夹,则递归调用该函数 注意两个问题: ...

  8. ThinkPHP 学习笔记 ( 二 ) 控制器 ( Controller )

    /** * ThinkPHP version 3.1.3 * 部署方式:应用部署 * 文内的 http://localhost/ 由实际主机地址代替 */ 入口文件 index.php: <?p ...

  9. 固定某一元素在某一位置 jquery

    方法: $(window).scroll(function (){}) 属性: 滚动变化值 $(window).scrollTop();$(window).scrollLeft(); 需要结合的样式: ...

  10. mysql线程缓存和表缓存

    一.线程缓存1.thread_cache_size定义了线程缓冲中的数量.每个缓存中的线程通常消耗256kb内存2.Threads_cached,可以看到已经建立的线程二.表缓存(table_cach ...