c#中的linq一
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一的更多相关文章
- C#中的Linq to Xml详解
这篇文章主要介绍了C#中的Linq to Xml详解,本文给出转换步骤以及大量实例,讲解了生成xml.查询并修改xml.监听xml事件.处理xml流等内容,需要的朋友可以参考下 一.生成Xml 为了能 ...
- c#中的linq二
c#中的linq二 using System; using System.Collections.Generic; using System.Linq; using System.Text; us ...
- Expert C# 5.0中的Linq部分
1.先看看.NET中的Linq 2.扩展方法 3.Lambda表达式和表达式树 4.Linq中的延迟操作 5.Linq中的查询方法 5.1分割操作 5.2连接操作 5.3排序操作 5.4分组和连接 5 ...
- 在VB中使用Linq To SQLite注意事项
昨天使Linq To SQLite 支持VB,今天在VB中写了几条Linq语句,发现了几个问题: 1.在Linq To SQLite中的Linq语句查询后并不是得到的匿名数据类,而是将Linq转换为S ...
- VB.NET中使用Linq TO SQL添加数据后获得自增长列ID
VB.NET中使用Linq TO SQL添加数据后获得自增长列ID: Dim tempOrdre As New Order With { .CustomerID = cmbCustomerName.S ...
- 如何在C#中调试LINQ查询
原文:How to Debug LINQ queries in C# 作者:Michael Shpilt 译文:如何在C#中调试LINQ查询 译者:Lamond Lu 在C#中我最喜欢的特性就是LIN ...
- LINQ查询表达式(2) - 在 C# 中编写 LINQ 查询
在 C# 中编写 LINQ 查询 C# 中编写 LINQ 查询的三种方式: 使用查询语法. 使用方法语法. 组合使用查询语法和方法语法. // 查询语法 IEnumerable<int> ...
- C#在DataTable中使用LINQ
LINQ 查询适用于实现的数据源 IEnumerable<T>接口或System.Query.IQueryable接口. DataTable类默认是没有实现以上接口的. 所以要在DataT ...
- C#中的LINQ
从自己的印象笔记里面整理出来,排版欠佳.见谅! 1.LINQ: 语言集成查询(Language Integrated Query) 实例: var q= from c in catego ...
随机推荐
- 【COGS】714. USACO 1.3.2混合牛奶(贪心+水题)
http://cojs.tk/cogs/problem/problem.php?pid=714 在hzwer的刷题记录上,默默地先跳过2题T_T...求凸包和期望的..T_T那是个啥..得好好学习 看 ...
- UVA 10325 - The Lottery(容斥)
以前做过的一个题,忘记/gcd了,看来需要把以前的东西看一下啊. #include <cstdio> #include <cstring> #include <iostr ...
- BZOJ3513: [MUTC2013]idiots
Description 给定n个长度分别为a_i的木棒,问随机选择3个木棒能够拼成三角形的概率. Input 第一行T(T<=100),表示数据组数.接下来若干行描述T组数据,每组数据第一行是n ...
- QDialog, QFileDialog 和 QDesktopServices 的使用方法
Qt中的QDialog类是用来生成对话框的类,QFileDialog 类是QDialog的衍生类,主要用来生成打开文件,或是打开文件目录的对话框,或者是保存文件的对话框,下面我们一一来看代码: 1. ...
- 设计模式(Design Patterns)
设计模式(Design Patterns) ——可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了 ...
- 如何设置NBU的Backup, Archive and Restore
第一行表示Master Server 第二行猜测表示当前主机 第三行不清楚 总结: 1. 这里压根就没有Media Server的事, Media Server对整个备份系统来说是透明的. 2. ...
- Grunt教程——初涉Grunt
前端自动化,这样的一个名词听起来非常的有吸引力,向往力.当今时代,前端工程师需要维护的代码变得及为庞大和复杂,代码维护.打包.发布等流程也 变得极为繁琐,同时浪费的时间和精力也越来越多,当然人为的错误 ...
- php扩展redis,编译安装redis服务
首先安装redis扩展 https://github.com/phpredis/phpredis 下载http://redis.io/download 服务软件 cd到软件存放目录unzip phpr ...
- ueditor1.4.3 php版本使用修改图片上传路径
实例化编辑器必须带上一下东西 header部分 <script type="text/javascript" charset="utf-8" src=&q ...
- 理解 Python 中的 *args 和 **kwargs
Python是支持可变参数的,最简单的方法莫过于使用默认参数,例如: def test_defargs(one, two = 2): print 'Required argument: ', one ...