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. JS function的参数问题

    1.当传入的参数个数小于声明的参数个数时,缺少的参数值就是:undefined 类似方法重载 var f1 = function(p1,p2,p3){     switch(arguments.len ...

  2. 在dreamweaver中输入代码时不会有提示的解决办法

    输入法造成的. 解决办法:编辑>首选参数>常规>取消“允许双字节内联输入”.

  3. OpenCV 2.4.11 VS2012 Configuration

    Add in the system Path: C:\opencv\build\x86\vc11\bin; Project->Project Property->Configuration ...

  4. mysql5.6 通用二进制安装

    mysql5.6 通用二进制安装: #卸载原有的mysqlyum remove mysql*ls /etc/my.cnf*mv /etc/my.cnf* /tmp/ #安装依赖包yum install ...

  5. CreateFeatureClass 异常,尝试读取或写入受保护的内存 Access

    在创建要素时出现如下异常,百思不得其解. 后经过多次试验,发现文件名改为其他的就可以了.自出的文件名为"第3条",后将文件名改为"A3"等,则可正常创建. 后再 ...

  6. [转]C#将image中的显示的图片转换成二进制

    本文转自:http://www.cnblogs.com/shuang121/archive/2012/07/09/2582654.html .将Image图像文件存入到数据库中 我们知道数据库里的Im ...

  7. foreach语句

    foreach语句他无非就是for循环的封装,为了提高开发速度才创造出来的.他其实跟for循环一样,只不过写起来比较简便,他是1.5版本才出来的一种封装语法.并没有什么奇特之处他里面的机制就是for循 ...

  8. Android shell 命令总结

    Package Manage(PM) pm list packages [FILTER] 查看已安装的应用包 -f 显示关联的apk文件 -s 只在系统应用中搜索Filter -3 只在第三方应用中搜 ...

  9. Twitter Storm中Bolt消息传递路径之源码解读

    本文初次发表于storm-cn的google groups中,现以blog的方式再次发表,表明本人徽沪一郎确实读过这些代码,:). Bolt作为task被executor执行,而executor是一个 ...

  10. Android 调用资源字符串的几种方法

    在 Layout XML 调用字符串资源: <TextView android:layout_width="fill_parent" android:layout_heigh ...