C# LINQ查询之对象
LINQ是一组查询技术的统称,其主要思想是将各种查询功能直接集成到C#语言中,可以对 对象、XML文档、SQL数据库、外部应用程序等进行操作。
这里面讲的简单的几个子句,
必须以from子句开头,以select或group子句结尾。
例子:
int [] nums={0,1,2,3,4,5};
var q = from n in nums // 表示查询数据的通用类型。
where n%2==0
select n;
一般用foreach()来输出结果。
foreach( var v in q){
Console.WriteLine(v.name);
}
结果为:0 2 4
--------------------------
public class Student{
private string name;
public string Name
{ get { return name; }
set { name = value; } } //可以在set里面写if语句 ,比如;set{if(name="chen") {name=null;}else{ name=value;}
或者简写 public string name{get;set;}
public int age{get;set;} }
...
List<Student> students =new List<Student>()
{ new Student{name ="chen",age=24},
new Student{name ="li",age=24},
new Student{name ="zhang",age=23} }
var q = from t in students
select t;
---------------------------------
where 子句
var q = from t in students
where t.name=='chen' && t.age=24
select t;
----------------------------------
orderby 子句 用于排序
var q = from t in students
orderby t.age descending,t.name ascending //按照age 降序 name 升序排列。
select t;
---------------------------------------
group by子句 //用于分组
var q = from t in students
group t by t.age;
foreach (var v in q)//必须使用嵌套的foreach循环
{
Console.WriteLine(v.key);//输出按照要求排序的键值 age
foreach (var v1 in v)
{
Console.WriteLine(”{0}{1}“,v1.姓名,v1.年龄);
} }
结果为:
24
chen
li
23
zhang
---------------------------------------------
select 子句
var q = from t in students
select new
{
姓名 = t.name,
年龄 = t.age
};
foreach (var v in q)
{
Console.WriteLine(”{0}{1}“,v.姓名,v.年龄);
}
--------------------------------
join in 操作符
需要定义另一个集合,比如:
public class People
{
public string name { get; set; }
public string sex { get; set; }
}
。。。。
List<People> peoples = new List<People>()
{ new People{name ="chen",sex="boy"},
new People{name ="li",sex="girl"},
new People{name ="zhang",sex="girl"} };
var q = from t in students
join c in peoples on t.name equals c.name
select new { 姓名 = c.name, 年龄 = t.age, 性别 = c.sex };//将两个对象的数据联系在一起,name一样时候相对应。
foreach (var v in q)
{
Console.WriteLine("{0}{1}{2}",v.姓名,v.年龄,v.性别);
}
结果为: chen 24 boy
li 24 girl
zhang 23 girl
---------------------------------------------------------------------------------
into 关键字
一般在 group里面用。
var q = from t in students
group t by t.age into groupstu //把之前的两个group ,into成一个变量
where groupstu.Count()>=2 // 对这个变量进行筛选,即 当groupstu里的成员大于或等于2时。
select new { 姓名=t.name, 年龄=t.age}
-------------------------------------------------------
let 关键字 // 中间变量,存储一个子表达式过程的变量。
比如: string[] str={"abc def"};
var q= from v in str
let word= v.Split(' ');
from vv in word
let upword=vv.ToUpper();//将字母大写
select upword;
结果为:ABC
DEF
C# LINQ查询之对象的更多相关文章
- C#高级知识点概要(3) - 特性、自动属性、对象集合初始化器、扩展方法、Lambda表达式和Linq查询
1.特性(Attributes) 特性(Attributes),MSDN的定义是:公共语言运行时允许你添加类似关键字的描述声明,叫做attributes, 它对程序中的元素进行标注,如类型.字段.方法 ...
- 使用Linq 查询数据 构建对象 select new{}
linq 查询数据 /// <summary> /// 汽车品牌及车型 /// </summary> /// <returns></returns> p ...
- Entity Framework 6 Recipes 2nd Edition(13-6)译 -> 自动编译的LINQ查询
问题 你想为多次用到的查询提高性能,而且你不想添加额外的编码或配置. 解决方案 假设你有如Figure 13-8 所示的模型 Figure 13-8. A model with an Associat ...
- LinqToDB 源码分析——轻谈Linq查询
LinqToDB框架最大的优势应该是实现了对Linq的支持.如果少了这一个功能相信他在使用上的快感会少了一个层次.本来笔者想要直接讲解LinqToDB框架是如何实现对Linq的支持.写到一半的时候却发 ...
- Linq查询基本操作
摘要:本文介绍Linq查询基本操作(查询关键字) - from 子句 - where 子句 - select子句 - group 子句 - into 子句 - orderby 子句 - join 子句 ...
- C#基础:LINQ 查询函数整理
1.LINQ 函数 1.1.查询结果过滤 :where() Enumerable.Where() 是LINQ 中使用最多的函数,大多数都要针对集合对象进行过滤,因此Where()在LINQ 的操作 ...
- 《Entity Framework 6 Recipes》中文翻译系列 (26) ------ 第五章 加载实体和导航属性之延缓加载关联实体和在别的LINQ查询操作中使用Include()方法
翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 5-7 在别的LINQ查询操作中使用Include()方法 问题 你有一个LINQ ...
- Rafy 中的 Linq 查询支持(根据聚合子条件查询聚合父)
为了提高开发者的易用性,Rafy 领域实体框架在很早开始就已经支持使用 Linq 语法来查询实体了.但是只支持了一些简单的.常用的条件查询,支持的力度很有限.特别是遇到对聚合对象的查询时,就不能再使用 ...
- Linq查询表达式
目录 1. 概述 2. from子句 3. where子句 4. select子句 5. group子句 6. into子句 7. 排序子句 8. let子句 9. join子句 10. 小结 1. ...
随机推荐
- 在Keras中可视化LSTM
作者|Praneet Bomma 编译|VK 来源|https://towardsdatascience.com/visualising-lstm-activations-in-keras-b5020 ...
- OpenCV-Python 用于角点检测的FAST算法 | 四十一
目标 在本章中, 我们将了解FAST算法的基础知识. 我们将使用OpenCV功能对FAST算法进行探索. 理论 我们看到了几个特征检测器,其中很多真的很棒.但是,从实时应用程序的角度来看,它们不够快. ...
- 记录一次MAC连接投影闪屏的问题。
遇到的问题:MAC笔记本连接投影出现闪屏怎么办? 解决办法:尝试过很多种办法,后面发现这个闪屏原因是投影机的refresh rate 默认不支持这么高的.调整到30hz左右即可. 步骤:使用HDMI转 ...
- Web 环境设置
修改最大打开文件数量 ulimit -n 100000 修改创建文件的最大值 #/etc/security/limits.conf * soft nofile 262140 * hard nofile ...
- CSS躬行记(3)——CSS属性拾遗
一.粘滞定位 粘滞定位(sticky)与相对定位类似,既不会脱离正常流,也不会改变元素盒类型,并且会保留原先所占的空间.它会相对于包含块偏移,它的包含块分为两种,第一种和绝对定位一样:第二种是最近的滚 ...
- Java并发基础03. 传统线程互斥技术—synchronized
在多个线程同时操作相同资源的时候,就会遇到并发的问题,如银行转账啊.售票系统啊等.为了避免这些问题的出现,我们可以使用synchronized关键字来解决,下面针对synchronized常见的用法做 ...
- 监控一姐Grafana你可认识?
我们先来认识一下格拉法纳——Grafana. 我去,这不就是实时监控大屏吗?记得 N 年前,部门为了做这么个功能,还花重金请专业公司搞过类似的图,现在想想其实也很简单呀. 话又说回来,其实 Grafa ...
- 《Java基础复习》—常识与入门
突然发现自己Java基础的底子不到位,复习! 所记知识会发布在CSDN与博客网站jirath.cn <Java基础复习>-常识与入门 一.Java语言的知识体系图 分为三部分 编程语言核心 ...
- 10年阿里自动化测试架构师帮您收集的:git常用命令大全以及git原理图【泣血推荐,建议收藏】
一.Git分布式版本控制简介 Git 是一个很强大的分布式版本控制系统.它不但适用于管理大型开源软件的源代码,管理私人的文档和源代码也有很多优势.本来想着只把最有用.最常用的 Git 命令记下来, ...
- STM32F103ZET6时钟
1.STM32F103ZET6时钟说明 STM32F103ZET6的时钟树图如下所示: STM32F103ZET6有很多个时钟源,分别有: HSE:高速外部时钟信号. HSI:高速内部部时钟信号. L ...