简单的一个小例子
---------------------------------------------------------------------
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Web.UI;
using System.Web;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
List<Student> list = new List<Student>();
list.Add(new Student(31,"xdaoming","man",14));
list.Add(new Student(31, "xdaoming", "women", 33));
list.Add(new Student(31, "xdaoming", "man", 22));
list.Add(new Student(1,"xaaob","women",18));
list.Add(new Student(23,"xcaoh","man",11));
list.Add(new Student(23,"das","man",11));
var dd = from stu in list
where stu.Name.StartsWith("x") //筛选出姓名从x开始的学员
orderby stu.Name.Substring(1,1) descending,stu.Age descending//复合排序
select stu;
foreach (Student s in dd)
{
Console.WriteLine(string.Format("{0} {1} {2} {3}",s.ID,s.Name,s.Sex,s.Age));
}
Console.ReadLine();
}
}
public class Student
{
public int ID { get; set; }
public string Name { get; set; }
public string Sex { get; set; }
public int Age { get; set; }
public Student(int id, string name, string sex, int age)
{
this.ID = id;
this.Name = name;
this.Sex = sex;
this.Age = age;
}
}
}
注意引用System.Linq
-----------------------------
过滤重复值
x..Distinct();
---------------------------
实现分组
分组查询和SQL语句中的带有“group”关键字的查询功能类似,它能够把查询结果按照关键字进行分组。
int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };
var group = from num in numbers
group num by num % 5 into g
select new { Remainder = g.Key, Numbers = g };
foreach (var item in group)
{
Console.WriteLine(string.Format("remain:", item.Remainder, item.Numbers));
foreach (var i in item.Numbers)
{
Console.WriteLine("number:" + i.ToString());
}
}
---------------------------
---------------------------
实现聚集查询
LINQ不仅能够实现复杂的查询,也可以实现和SQL相同的聚集和联合查询,包括获取最大值、最小值、平均值和计数等。
1。实现计数
使用Count()方法返回集合项的数目,使用方法示例代码如下:
var num = (from s in names select s.ToLower()).Count();
2。求最大值和最小值
返回最大值、最小值的方法和计数方法基本相同,也有两种表达方式,混合模式示例代码如下:
int maxLength = (from s in names select s.Length).Max();//混合模式求最大值
int minLength = (from s in names select s.Length).Min();//混合模式求最小值
3。求平均值
使用Average()方法返回集合的平均值,也有两种表达方式,混合模式和纯粹查询模式。
4。返回集合的总和
使用Sum()方法可以获取集合的总和,也有两种表达方式,混合模式和纯粹查询模式。
---------------------------
【本节示例参考:\源代码\C14\ Example_LINQSkip】
在编程中我们常常需要跳过某一段项目获取另一段的值,如分页就需要这样处理,没有LINQ前,实现分页比较麻烦,现在LINQ提供了分区类查询方法,实现分页就易如反掌,下面看看它的强大功能吧。
分区类查询使用Take,、Skip、TakeWhile、SkipWhile来共同实现,其中,
Take:提取指定数量的项;
Skip:跳过指定数量的项并获取剩余的项;
TakeWhile:根据指定条件提取项;
SkipWhile:根据指定条件跳过项。
下面使用一个简单的例子演示Take/Skip的用法。
01 int[] numbers = new int[] { 1,2,3,4,5,6,7,8,9,10};
02 //分区类查询
03 var num5 = numbers.Skip(1).Take(2);
04 foreach (var item in num5)
05 {
06 Console.WriteLine("分区类查询结果={0}",item);
07 }
----------------------------------------------------------------------------------------
LINQ 关联表
var output = (from sub in context.Tbl_SubCompany
join dept in context.Tbl_Department
on sub.SubCompanyId equals dept.SubCompanyID
where sub.Ins_no == InsNo
select new
{
dept.DepartmentID,
dept.DepartmentName
}).ToList().SerializeObject();
---------------------------------------------------
参考地址