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