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 ...
随机推荐
- 基于Berkeley DB实现的持久化队列
转自:http://guoyunsky.iteye.com/blog/1169912 队列很常见,但大部分的队列是将数据放入到内存.如果数据过多,就有内存溢出危险,而且长久占据着内存,也会影响性能.比 ...
- select @@identity的用法
用select @@identity得到上一次插入记录时自动产生的ID 如果你使用存储过程的话,将非常简单,代码如下:SET @NewID=@@IDENTITY 说明: 在 一条 INSERT.SEL ...
- 使用Hydra扫描网络中存在SSH弱登录密码的Linux系统
1. apt-get install cmake libssl-dev 2. apt-get install hydra (需要图形界面的话用hydra-gtk) 3. hydra -s 22 -v ...
- 词频统计(WEB版)
通过点击浏览按钮输入文件: 点击查询按钮后返回结果: 前台代码: <%@ Page Language="C#" AutoEventWireup="true" ...
- 手动编译安装lanmp centos6.5 64位
对于新手来说一个很大的问题就是连源码包都在到在哪下载,还有就是软件的依赖关系 如果网卡也不会配置,请翻看我的其他文章 这就是基本所需的源码包了 http://pan.baidu.com/s/1kTxb ...
- 每天学点GDB 11
为了跟踪glibc库中函数的执行,需要带有debug symbol的glibc, 如果是debian或者是基于debian的发行版本如ubuntu和linuxmint之类的,很简单执行如下指令安装即可 ...
- PHP 开发 APP 接口 学习笔记与总结 - APP 接口实例 [1] 单例模式连接数据库
单例模式 单例模式三大原则: ① 构造函数需要标记为非 public (防止外部使用 new 操作符创建对象),单例类不能在其他类中实例化,只能被自身实例化: ② 拥有一个保存类的实例的静态成员变量 ...
- PHP 下载导出中文名的文件的编码注意事项
我的页面全部都为utf-8 在代码中我的文件名是中文名. 在创建文件时,就要将utf-8转码成gbk(用以支持中文) $file = iconv('utf-8',"gbk",$fi ...
- 浅谈 举家搬迁静态文件到CDN
由于七牛CDN最近做活动,对于标准用户可以免费使用如下优惠 10 GB 存储空间 10 G/月 下载流量 10 万次/月 PUT/DELETE 请求 100 万次/月 GET 请求 以上这些指标直接就 ...
- HTML5 本地存储 LocalStorage
说到本地存储,这玩意真是历尽千辛万苦才走到HTML5这一步,之前的历史大概如下图所示: 最早的Cookies自然是大家都知道,问题主要就是太小,大概也就4KB的样子,而且IE6只支持每个域名20个co ...