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. CSS3 2D Transform

    在 一个二维或三维空间,元素可以被扭曲.移位或旋转.只不过2D变形工作在X轴和Y轴,也就是大家常说的水平轴和垂直轴:而3D变形工作在X轴和Y轴之外, 还有一个Z轴.这些3D变换不仅可以定义元素的长度和 ...

  2. Nginx 笔记与总结(14)expires 缓存设置

    设置缓存,可以提高网站性能. 当网站的部分内容,比如新闻站的图片,一旦发布就不太可能发生更改,此时需要用户在访问一次页面之后,把该页面的图片缓存在用户的浏览器端一段时间,就可以用到 nginx 的 e ...

  3. python 调用系统命令

    Python执行系统命令一般的用到了四种方法, 第一种是 os.system(),  这个方法比较常用, 使用也简单, 会自动的生成一个进程,在进程完成后会自动退出, 需要注意的是 os.system ...

  4. linux 常用的基本命令

    $ ls # 查看文件列表 $ ls dir_name | more : 分页查看文件列表 $ ll -h dir_name # 以 KB.MB.GB格式查看文件大小 $ ll -Sh  # --so ...

  5. MySQL线程独享[转]

    一.前言在 MySQL 中,线程独享内存主要用于各客户端连接线程存储各种操作的独享数据,如线程栈信息,分组排序操作,数据读写缓冲,结果集暂存等等,而且大多数可以通过相关参数来控制内存的使用量。 二.线 ...

  6. laravel 查看SQL语句

    Route::get('/test-sql', function(){ DB::enableQueryLog(); $user = App\User::first(); return DB::getQ ...

  7. Byte History

    https://en.wikipedia.org/wiki/Byte The term byte was coined by Werner Buchholz in July 1956, during ...

  8. ajax普通弹窗;Bootstrp弹窗

    1.普通弹窗 主页面: <head> <meta http-equiv="Content-Type" content="text/html; chars ...

  9. php学习笔记 [预定义数组(超全局数组)]

    <?php  预定义数组: * 自动全局变量---超全局数组 * * 1.包含了来自WEB服务器,客户端,运行环境和用户输入的数据 * 2.这些数组比较特别 * 3.全局范围内自动生效,都可以直 ...

  10. phpCAS::handleLogoutRequests()关于java端项目登出而php端项目检测不到的测试

    首先,假如你有做过cas,再假如你的cas里面有php项目,这个时候要让php项目拥有cas的sso功能,你需要改造你的项目,由于各人的项目不同,但是原理差不多,都是通过从cas服务器获取sessio ...