代码语言
.
CSharp
.
JS
Java
Asp.Net
C
MSSQL
PHP
Css
PLSQL
Python
Shell
EBS
ASP
Perl
ObjC
VB.Net
VBS
MYSQL
GO
Delphi
AS
DB2
Domino
Rails
ActionScript
Scala
代码分类
文件
系统
字符串
数据库
网络相关
图形/GUI
多媒体
算法
游戏
Jquery
Extjs
Android
HTML5
菜单
网页交互
WinForm
控件
企业应用
安全与加密
脚本/批处理
开放平台
其它
【
CSharp
】
linq 基本方法
作者:
kunkun0921
/ 发布于
2015/1/26
/
1316
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApp { public class LinqDo { static List<Package> list = new List<Package>() { new Package() { Name = "A1_", Age = 11, Sex = "男" }, new Package() { Name = "O1", Age = 30, Sex = "男" }, new Package() { Name = "E1", Age = 18, Sex = "女" }, new Package() { Name = "L1", Age = 10, Sex = "男" }, new Package() { Name = "H1", Age = 16, Sex = "女" }, new Package() { Name = "B1", Age = 15, Sex = "男" }, new Package() { Name = "A1", Age = 11, Sex = "男" } }; static List<Package> list2 = new List<Package>() { new Package() { Name = "A2221", Age = 11, Sex = "男" }, new Package() { Name = "O3331", Age = 30, Sex = "男" }, new Package() { Name = "A1", Age = 11, Sex = "男" } }; /// <summary> /// 普通linq查询 /// where orderby /// </summary> public static void LinqToQuery() { //输出整个对象 var queryResult = from p in list where p.Age > 15 orderby p.Name select p; foreach (var item in queryResult) { Console.WriteLine(item.Name + " " + item.Age + " " + item.Sex); } //自定义查询结果 var pp = (from p in list where p.Sex == "女" select new { p.Name, p.Age }).ToList(); foreach (var item in pp) { Console.WriteLine(item.Name + " " + item.Age); } } /// <summary> /// 返回出现在其中一个集合中的唯一元素 /// </summary> public static void LinqToUnion() { var unionResult = list.Union(list2); foreach (var item in unionResult) { Console.WriteLine(item.Name + " " + item.Age + " " + item.Sex); } } /// <summary> /// 分组查询 /// </summary> public static void LinqToGroupBy() { //根据sex分组 //tp自定义 Console.WriteLine("分组没有条件:"); var pa = (from p in list group p by p.Sex into tp select new { Name = tp.Key, Count = tp.Count() }).ToList(); foreach (var item in pa) { Console.WriteLine(item.Name + " " + item.Count); } Console.WriteLine("分组带有条件:"); pa = (from p in list group p by p.Sex into tp where tp.Count() > 3 select new { Name = tp.Key, Count = tp.Count() }).ToList(); foreach (var item in pa) { Console.WriteLine(item.Name + " " + item.Count); } list = list.Union(list2).ToList(); Console.WriteLine("根据多列分组:"); var pp = (from p in list group p by new { p.Sex, p.Age } into tp select new { Name = tp.Key, Count = tp.Count() }); foreach (var item in pp) { Console.WriteLine(item.Name + " " + item.Count); } } /// <summary> /// Lookup键值对集合 /// </summary> public static void LinqToLookup() { list = list.Union(list2).ToList(); //表示映射到一个或多个值的各个键的集合。 //类似根据sex分组 Lookup<string, Package> lookkup = list.ToLookup(p => p.Sex) as Lookup<string, Package>; Console.WriteLine("性别:男"); foreach (var item in lookkup["男"]) { Console.WriteLine(item.Name + " " + item.Age + " " + item.Sex); } Console.WriteLine("性别:女"); foreach (var item in lookkup["女"]) { Console.WriteLine(item.Name + " " + item.Age + " " + item.Sex); } } /// <summary> /// 确定序列是否包含任何元素。 /// 返回:如果源序列包含任何元素,则为 true;否则为 false。 /// </summary> public static void LinqToAny() { //true bool result = list.Any(); Console.WriteLine(result.ToString()); //false int[] rs = new int[0]; Console.WriteLine(rs.Any()); } /// <summary> /// 确定序列中的所有元素是否满足条件。 /// 返回:如果源序列中的每个元素都通过指定谓词中的测试,或者序列为空,则为 true;否则为 false。 /// </summary> public static void LinqToAll() { //false bool result = list.All(p => p.Age > 15); Console.WriteLine(result.ToString()); list.All(c => c.Sex == "女"); //true result = list.All(p => p.Age >= 10); Console.WriteLine(result.ToString()); } /// <summary> /// 通过使用默认的相等比较器确定序列是否包含指定的元素 /// 返回:如果源序列包含具有指定值的元素,则为 true;否则为 false。 /// </summary> public static void LinqToContains() { //true bool result = list.Contains(list[0]); Console.WriteLine(result.ToString()); //false result = list.Contains(new Package() { Name = "A1", Age = 11, Sex = "男" }); Console.WriteLine(result.ToString()); } /// <summary> /// Take:从序列的开头返回指定数量的连续元素 /// Skip:跳过序列中指定数量的元素,然后返回剩余的元素 /// TakeWhile:只要满足指定的条件,就会返回序列的元素。 /// SkipWhile:只要满足指定的条件,就跳过序列中的元素,然后返回剩余元素。 /// </summary> public static void LinqToTakeSkip() { Console.WriteLine("所有元素:"); foreach (var item in list) { Console.WriteLine(item.Name + " " + item.Age + " " + item.Sex); } Console.WriteLine("从序列的开头返回指定数量的连续元素:"); var sp1 = list.Take(2); foreach (var item in sp1) { Console.WriteLine(item.Name + " " + item.Age + " " + item.Sex); } Console.WriteLine("跳过序列中指定数量的元素,然后返回剩余的元素:"); var sp2 = list.Skip(2); foreach (var item in sp2) { Console.WriteLine(item.Name + " " + item.Age + " " + item.Sex); } Console.WriteLine("只要满足指定的条件,就会返回序列的元素:"); var sp3 = list.AsEnumerable().OrderByDescending(p => p.Age).TakeWhile(p => p.Age > 15); foreach (var item in sp3) { Console.WriteLine(item.Name + " " + item.Age + " " + item.Sex); } Console.WriteLine("只要满足指定的条件,就跳过序列中的元素,然后返回剩余元素:"); var sp4 = list.AsEnumerable().OrderByDescending(p => p.Sex).SkipWhile(p => p.Sex.Equals("女")); foreach (var item in sp4) { Console.WriteLine(item.Name + " " + item.Age + " " + item.Sex); } } /// <summary> /// 通过使用指定的 IEqualityComparer<T> 对值进行比较返回序列中的非重复元素。 /// 实现PackageComparer比较器后,您可以使用 Distinct /// 返回:一个 IEnumerable<T>,包含源序列中的非重复元素。 /// </summary> public static void LinqToDistinct() { Console.WriteLine("全部元素:"); foreach (var item in list) { Console.WriteLine(item.Name + " " + item.Age + " " + item.Sex); } Console.WriteLine("元素个数:" + list.Count); Console.WriteLine("Dinstinct之后元素"); var sp = list.Distinct(new PackageComparer()); foreach (var item in sp) { Console.WriteLine(item.Name + " " + item.Age + " " + item.Sex); } Console.WriteLine("元素个数:" + sp.Count()); } /// <summary> /// 交集:返回两个集合中都有的元素 /// 并集:返回所有元素(ZIP net4.0里面新增的) /// 差集:返回只出现在一个集合中的元素 /// </summary> public static void LinqToIntersectExcept() { Console.WriteLine("全部元素:"); foreach (var item in list) { Console.WriteLine(item.Name + " " + item.Age + " " + item.Sex); } Console.WriteLine("元素个数:" + list.Count); //交集 Console.WriteLine("交集Intersect之后元素"); var sp = list.Intersect(list2, new PackageComparer()); foreach (var item in sp) { Console.WriteLine(item.Name + " " + item.Age + " " + item.Sex); } Console.WriteLine("交集元素个数:" + sp.Count()); //差集 Console.WriteLine("差集Except之后元素"); sp = list.Except(list2, new PackageComparer()); foreach (var item in sp) { Console.WriteLine(item.Name + " " + item.Age + " " + item.Sex); } Console.WriteLine("差集元素个数:" + sp.Count()); sp = list.Union(list2);//也能当作并集使用,但是没有重复项 foreach (var item in sp) { Console.WriteLine(item.Name + " " + item.Age + " " + item.Sex); } Console.WriteLine("元素个数:" + sp.Count()); } /// <summary> /// 返回集合中第一对象、默认对一个对象 /// 返回集合中最后一个对象、默认最后一个对象 /// 返回集合索引号对象 /// Single只返回一个满足条件的元素,如果有多个元素都满足条件,就抛出异常 /// </summary> public static void LinqToFirstLast() { var item = list.First(); Console.WriteLine("list集合中第一个对象:" + item.Name + " " + item.Age + " " + item.Sex); item = list.Last(); Console.WriteLine("list集合中最后一个对象:" + item.Name + " " + item.Age + " " + item.Sex); item = list.FirstOrDefault(); Console.WriteLine("list集合中默认对象:" + item.Name + " " + item.Age + " " + item.Sex); item = list.LastOrDefault(); Console.WriteLine("list集合中默认最后一个对象:" + item.Name + " " + item.Age + " " + item.Sex); item = list.ElementAt(1); Console.WriteLine("list集合中索引为1对象:" + item.Name + " " + item.Age + " " + item.Sex); item = list.ElementAtOrDefault(1); Console.WriteLine("list集合中索引为1默认对象:" + item.Name + " " + item.Age + " " + item.Sex); //Single只返回一个满足条件的元素,如果有多个元素都满足条件,就抛出异常 item = list.Single(p => p.Age == 30); Console.WriteLine("Single只返回一个满足条件的元素:" + item.Name + " " + item.Age + " " + item.Sex); } /// <summary> /// 查找元素、元素列表、元素索引 /// </summary> public static void LinqToFind() { Console.WriteLine("全部元素:"); foreach (var item in list) { Console.WriteLine(item.Name + " " + item.Age + " " + item.Sex); } //返回集合 Console.WriteLine("返回集合列表:"); //检索与指定谓词定义的条件匹配的所有元素 //如果找到一个其中所有元素均与指定谓词定义的条件匹配的 Array,则为该数组;否则为一个空 Array。 var oop = list.FindAll(p => p.Age > 15); foreach (var item in oop) { Console.WriteLine(item.Name + " " + item.Age + " " + item.Sex); } Console.WriteLine("返回单个元素:"); //搜索与指定谓词所定义的条件相匹配的元素,并返回整个 List<T> 中的第一个匹配元素。 //如果找到与指定谓词定义的条件匹配的第一个元素,则为该元素;否则为类型 T 的默认值。 var ooop = list.Find(p => p.Name == "O1"); Console.WriteLine(ooop.Name + " " + ooop.Age + " " + ooop.Sex); Console.WriteLine("返回第一个索引:"); //搜索与指定谓词所定义的条件相匹配的元素,并返回整个 List<T> 中第一个匹配元素的从零开始的索引 //如果找到与 match 定义的条件相匹配的第一个元素,则为该元素的从零开始的索引;否则为 -1。 int index = list.FindIndex(4, p => p.Sex == "女"); Console.WriteLine(index); Console.WriteLine("返回符合条件最后一个元素:"); //搜索与指定谓词所定义的条件相匹配的元素,并返回整个 List<T> 中的最后一个匹配元素。 //如果找到,则为与指定谓词所定义的条件相匹配的最后一个元素;否则为类型 T 的默认值。 ooop = list.FindLast(p => p.Sex == "女"); Console.WriteLine(ooop.Name + " " + ooop.Age + " " + ooop.Sex); Console.WriteLine("返回符合条件最后一个元素索引:"); //搜索与指定谓词所定义的条件相匹配的元素,返回 List 或它的一部分中最后一个匹配项的从零开始的索引。 index = list.FindLastIndex(p => p.Sex == "女"); Console.WriteLine(index); } /// <summary> /// 遍历元素集合 /// </summary> public static void LinqToForeach() { list.ForEach(delegate(Package item) { Console.WriteLine(item.Name + " " + item.Age + " " + item.Sex); }); } /// <summary> /// 创建源 List 中的元素范围的浅表副本 /// </summary> public static void LinqToRange() { Console.WriteLine("全部元素:"); foreach (var item in list) { Console.WriteLine(item.Name + " " + item.Age + " " + item.Sex); } //从2开始,取2个元素 var op = list.GetRange(2, 2); Console.WriteLine("范围元素:"); foreach (var item in op) { Console.WriteLine(item.Name + " " + item.Age + " " + item.Sex); } } /// <summary> /// 要在新 ArrayList 中对其进行多次复制的 Object。该值可以为 空引用(在 Visual Basic 中为 Nothing)。 /// 复制元素 /// </summary> public static void LinqToRepeat() { System.Collections.ArrayList array = System.Collections.ArrayList.Repeat("abc", 10); foreach (object obj in array) { Console.WriteLine(obj.ToString()); } } } /// <summary> /// 实现可以在 Distinct 方法中使用的相等比较器。 /// </summary> class PackageComparer : IEqualityComparer<Package> { public bool Equals(Package x, Package y) { if (Object.ReferenceEquals(x, y)) return true; if (Object.ReferenceEquals(x, null) || Object.ReferenceEquals(y, null)) return false; return x.Age == y.Age && x.Name == y.Name && x.Sex == y.Sex; } public int GetHashCode(Package product) { if (Object.ReferenceEquals(product, null)) return 0; int hashProductName = product.Name == null ? 0 : product.Name.GetHashCode(); int hashProductCode = product.Age.GetHashCode(); int hashProductSex = product.Sex.GetHashCode(); return hashProductName ^ hashProductCode ^ hashProductSex; } } }
试试其它关键字
linq
同语言下
.
文件IO 操作类库
.
Check图片类型[JPEG(.jpg 、.jpeg),TIF,GIF,BMP,PNG,P
.
机器名和IP取得(IPV4 IPV6)
.
Tiff转换Bitmap
.
linqHelper
.
MadieHelper.cs
.
RegHelper.cs
.
如果关闭一个窗体后激活另一个窗体的事件或方法
.
创建日志通用类
.
串口辅助开发类
可能有用的
.
C#实现的html内容截取
.
List 切割成几份 工具类
.
SQL查询 多列合并成一行用逗号隔开
.
一行一行读取txt的内容
.
C#动态修改文件夹名称(FSO实现,不移动文件)
.
c# 移动文件或文件夹
.
c#图片添加水印
.
Java PDF转换成图片并输出给前台展示
.
网站后台修改图片尺寸代码
.
处理大图片在缩略图时的展示
kunkun0921
贡献的其它代码
(
40
)
.
linq 基本方法
.
Form窗体关闭原因
.
消除button按下出现的虚线
.
GUID转换为Int64
.
将窗体固定在显示器的左上角
.
获取进程或线程的相关信息
.
判断当前操作用户的管理角色
.
两个DataTable的加减乘除
.
视频API类 摄像头
.
集合、DataTable互转
Copyright © 2004 - 2024 dezai.cn. All Rights Reserved
站长博客
粤ICP备13059550号-3