Linq和Lamda表达式的简单处理方式
一 什么是LINQ?
LINQ即Language Integrated Query(语言集成查询),LINQ是集成到C#和Visual Basic.NET这些语言中用于提供查询数据能力的一个新特性。
二 简单的Linq例子。(简单形式我就不介绍了,主要以Lambda形式介绍)。
///针对于DataTable
///Linq表达式
var drArry = from r in dtZuheData.AsEnumerable()
where r["SECURITIESCODE"].ToString().Trim() == "100"
group r by new
{
Date = r.Field<decimal>("datetime").ToString().Substring(0, 6),
name = r.Field<string>("NAME")
} into g
orderby g.Key.Date descending
select new
{
Date = g.Key.Date,
Name = g.Key.name,
MaxPrice = g.Max(p => p.Field<decimal>("datetime"))
};
///等同的Lamda表达式
var listMaxDateDay = dtZuheData.AsEnumerable().Where(r => r["SECURITIESCODE"].ToString().Trim() == "100")
.GroupBy(r => new { Date = r["datetime"].ToString().Substring(0, 6) })
.Select(g => (new { name = g.Key.Date, Date = g.Max(t => t.Field<decimal>("datetime")) }))
.OrderBy(a => a.Date);
1 首先创建一个实体对象类并赋值。
public class Person
{ public int PId { get; set; } //自增ID public string Name { get; set; } public int Age { get; set; } public int JobId { get; set; }
} List<Person> pA = new List<Person>();
pA.Add(new Person() { PId = 1, Name = "张三", Age = 16, JobId = 1 });
pA.Add(new Person() { PId = 2, Name = "小红", Age = 18, JobId = 2 });
pA.Add(new Person() { PId = 3, Name = "王武", Age = 20, JobId = 3 });
pA.Add(new Person() { PId = 4, Name = "小梅", Age = 17, JobId = 4 });
pA.Add(new Person() { PId = 5, Name = "小李", Age = 24, JobId = 3 }); public class Job
{ public int JobId { get; set; } //自增ID
public string JobName { get; set; } public int WorkAge { get; set; }
} List<Job> jB = new List<Job>();
jB.Add(new Job() { JobId = 1, JobName = "制造业", WorkAge = 3 });
jB.Add(new Job() { JobId = 2, JobName = "IT行业", WorkAge = 5 });
jB.Add(new Job() { JobId = 3, JobName = "建筑业", WorkAge = 2 });
jB.Add(new Job() { JobId = 4, JobName = "金融业", WorkAge = 1 });
2 查询所有人:
var result = pA.Select(k => k).ToList();
3.where条件(年龄大于18的):
var result1 = pA.Where(k => k.Age > 18).ToList(); //wherevar result2 = pA.Where(k => k.Age > 18 && k.JobId==3 ).ToList(); // andvar result3 = pA.Where(k => k.Age > 18 || k.JobId == 3).ToList(); // or
4.group by(一个字段和多个字段)
//单个字段var result4 = pA.Where(k => k.Age > 10).GroupBy(j => j.JobId).Select(l => l.Key).ToList();//多个字段var result5 = pA.Where(k => k.Age > 10)
.GroupBy(a => new Person{ PId=a.PId , Name=a.Name, Age=a.Age, JobId=a.JobId })
.Select(a => a.Key).ToList();
4.1 Distinct(单列去重)
//单列去重var result13 = pA.Select(k => k.JobId).Distinct();
5.order by(排序,动态排序)
var result6 = pA.Where(k => k.Age > 10)
.OrderBy(k => k.Age).ToList(); // asc var result7 = pA.Where(k => k.Age > 10)
.OrderByDescending(k => k.Age).ToList(); // desc//先按年龄倒序,在按职业正序,在按名称倒序。var result8 = pA.Where(k => k.Age > 10)
.OrderByDescending(k => k.Age).ThenBy(k => k.JobId).ThenByDescending(k => k.Name).ToList();
//动态排序var result81 = pA.OrderBy(k => GetPropertyValue(k, "Age")).ToList();var result82 = pA.OrderBy(k => GetPropertyValue(k, "JobId")).ToList();private static object GetPropertyValue(object obj, string property)
{
System.Reflection.PropertyInfo propertyInfo = obj.GetType().GetProperty(property); return propertyInfo.GetValue(obj, null);
}
6 count() (总行数)
var result9 = pA.Where(k => k.Age > 10).Count();
7 avg() (平均年龄)
var result10 = pA.Average(k => k.Age);
8 Contains (相当于sql中like)检索名称中有小字:
注意:如果检索的是英文的话,需要大小写转换,因为linq区分大小写!
var result11 = pA.Where(k => k.Name.Contains("小")).ToList();
9 join
var result12 = pA.Join(jB, j => j.JobId, k => k.JobId, (j, k) => new {j.PId,j.Name,j.Age,k.JobName }).ToList();
10 left join (DefaultIfEmpty)
var result13 = pA.Join(jB, j => j.JobId, k => k.JobId, (j, k) => new { j.PId, j.Name, j.Age, k.JobName }).DefaultIfEmpty().ToList();
11 Take (相当于top)
//获取前几条(相当于top)
var result154 = pA.Where(o => o.Age > 18).Take(3).ToList();
Linq和Lamda表达式的简单处理方式的更多相关文章
- SQL、Linq、lamda表达式 同一功能不同写法
一.SQL.Linq.lamda表达式 同一功能不同写法 SQL LINQ Lambda SELECT * FROM HumanResources.Employee from e in Employe ...
- C# Linq及Lamda表达式实战应用之 GroupBy 分组统计
在项目中做统计图表的时候,需要对查询出来的列表数据进行分组统计,首先想到的是避免频繁去操作数据库可以使用 Linq eg: //例如对列表中的Cu元素进行按年GroupBy分组统计 //包含年份,平均 ...
- c# Linq及Lamda表达式应用经验之 GroupBy 分组
示例1: GroupBy 分组在List<>泛型中的应用 原表: 按姓名Nam 分组后结果: 对DATATABLE 进行LAMDA查询时必须在项目的引用中添加 System.Data.Da ...
- (转)c# Linq及Lamda表达式应用经验之 GroupBy 分组
本文转载自:http://www.cnblogs.com/han1982/p/4138163.html 示例1: GroupBy 分组在List<>泛型中的应用 原表: 按姓名Nam 分组 ...
- linq和lamda表达式中添加时间判断时解决方案
在工作中遇到个问题,在使用lamda查询数据的时候,需要添加一个时间判断, DateTime.AddDays(3) > e.ExpirationDate 例如:list = Context.Vo ...
- JAVA8新特性——Lamda表达式
JAVA9都要出来了,JAVA8新特性都没搞清楚,是不是有点掉队哦~ Lamda表达式,读作λ表达式,它实质属于函数式编程的概念,要理解函数式编程的产生目的,就要先理解匿名内部类. 先来看看传统的匿名 ...
- C#DataTable 使用GroupBy方法的lamda 表达式和Linq语句写法
https://www.cnblogs.com/johnblogs/p/6006867.html DataTable ds = new DataTable(); //1.lamda 表达式写法(推荐) ...
- LINQ的左连接、右连接、内连接和Lamda表达式实现Left join
1.左连接: var LeftJoin = from t1 in l1join t2 in l2on t1.ID equals t2.ID into Joinedt12from t3 in Joine ...
- 解读ASP.NET 5 & MVC6系列(12):基于Lamda表达式的强类型Routing实现
前面的深入理解Routing章节,我们讲到了在MVC中,除了使用默认的ASP.NET 5的路由注册方式,还可以使用基于Attribute的特性(Route和HttpXXX系列方法)来定义.本章,我们将 ...
随机推荐
- [安卓] 19、一个蓝牙4.0安卓DEMO
一.工程结构&概述 整个应用包含两个按钮,一个是搜索所有蓝牙设备,另一个是连接所有蓝牙设备~ 下面是整个工程的文件结构: 二.代码业务流程跟踪 2.1.两个按钮 下面讲讲该工程里的主要跳转流程 ...
- [编译] 1、第一个makefile简单例子
前言 本篇用一个最简单的例子引入makefile,教你编写第一个makefile 正文 在Download/aa文件夹下有a.c和makefile文件 litao@litao:~/Downloads/ ...
- django开发个人简易Blog——数据模型
提到数据模型,一定要说一下MVC,MVC框架是现代web开发中最流行的开发框架,它将数据与业务逻辑分开,减小了应用之间的高度耦合.个人非常喜欢MVC开发框架,除了具有上述特性,它使得web开发变得非常 ...
- 字符串查找String.IndexOf
String.indexOf的模拟实现,没想象中有多么高深的查找算法,就是最普通的遍历查找 思路:先找到第一个相同的字符,然后依次比较后面的字符,若都相等则表示查找成功 /** * 查找字符串patt ...
- Nginx做前端Proxy时TIME_WAIT过多的问题
我们的DSP系统目前基本非凌晨时段的QPS都在10W以上,我们使用Golang来处理这些HTTP请求,Web服务器的前端用Nginx来做负载均衡,通过Nginx的proxy_pass来与Golang交 ...
- java Decompiler的bug
java Decompiler 有一个明显的bug是, 之前的打开jar文件,会被缓存起来,如果再次打开同名jar文件(jar内容替换~!),会导致仍然显示原来内容! . 必须关闭Decompiler ...
- CSS的两个小知识点 伪类选择器和display:table-cell
li:first-child {color:red} li:nth-child(3n) {color: red} 在对nth-child传参的时候,已经直接用公式,3n就表示3的倍数.多用伪类和伪元素 ...
- navigationController pop的几种方法
一,popViewControllerAnimated [self.navigationController popViewControllerAnimated:YES]; 二,popToRootVi ...
- salesforce 零基础学习(四十二)简单文件上传下载
项目中,常常需要用到文件的上传和下载,上传和下载功能实际上是对Document对象进行insert和查询操作.本篇演示简单的文件上传和下载,理论上文件上传后应该将ID作为操作表的字段存储,这里只演示文 ...
- Lucene学习
一.全文索引的原理 数据存在形式: 1.结构化数据: 指具有固定格式或有限长度的数据,如数据库,元数据等. 2.非结构化数据(全文数据): 指不定长或无固定格式的数据,如邮件,word文档等. 3.半 ...