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