日期:2014-05-20 浏览次数:20943 次
LinQ to Object查询语句例子:
/// <summary>
/// LinQ语句
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnQuery_Click(object sender, EventArgs e)
{
//LinQ to Object 查询语句部分
//泛型集合数据persons
List<string> persons = new List<string>();
persons.Add("zhang san");
persons.Add("zhang san feng");
persons.Add("li si");
persons.Add("wang wu");
persons.Add("li ba");
persons.Add("lao wu");
persons.Add("zhang xx");
//输出person中所有的元素
//var result = from p in persons select p;
////输出
//result.Print();
//条件
//var result = from p in persons where p.StartsWith("zhang") select p;
////输出
//result.Print();
//排序
//var result = from p in persons orderby p select p;
//result.Print();
}
/// <summary>
/// 拓展类,只要是静态就可以
/// </summary>
public static class ExtraClass
{
//为IEnumerable提供输出的方法
public static void Print(this IEnumerable<int> ie)
{
IEnumerator<int> result = ie.GetEnumerator();
string str = "";
while (result.MoveNext())
{
str += result.Current + "\t";
}
MessageBox.Show(str);
}
Linq高级查询方法:
聚合类:
Count,Max/Min,Average
排序类:
ThenBy //再排序
分区类:
Take,TakeWhile,Skip,SkipWhile
Take取值,TakeWhile当条件满足的时候才取值
//Skip跳过几个值,SkipWhile当条件满足的时候才进行跳值,主要用于分页
集合类:
Distinct //去掉重复的值
生成类:
Range,Repeat
——聚合类,排序类
/// <summary>
/// Linq的高级方法
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnSenior_Click(object sender, EventArgs e)
{
//LinQ to Object 查询高级部分
//数组数据persons
int[] arr = { 324,5,2,6534,54,566,6,656,78,80,3234,234,42,342};
//聚合类Count,Max/Min,Average,Sum........
//var sum = arr.Sum();//求和
//var max = arr.Max();//最大值
//var min = arr.Min();//最小值
//var avg = arr.Average();//平均值
//var count = arr.Count();//数组元素个数
//MessageBox.Show("和:"+sum+"\t 最大值:"+max+"\t 最小值:"+min+"\t 平均值:"+avg+"\t arr的数组元素个数:"+count);
//排序类
//var result = arr.OrderBy(p =>p);由小到大
// var result = arr.OrderBy(p => p.ToString().Substring(0,1));//一次排序
var result = arr.OrderBy(p=>p.ToString().Substring(0,1)).ThenBy(p=>p);//二次排序
result.Print();
}
生成类查询方法:
使用生成类查询方法时,需要注意以下几点:
和其他几类方法不同,Range/Repeat 不是扩展方法,而是普通的静态方法
Range 只能产生整数序列
Repeat 可以产生泛型序列
所有的查询方法都存放在 System.Linq.Enumerable 静态类中
例子:
/// <summary>
/// Linq的高级方法
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnSenior_Click(object sender, EventArgs e)
{
//LinQ to Object 查询高级部分
//数组数据persons
int[] arr = { 324,5,2,6534,54,566,6,656,78,80,3234,234,42,342};
//分区类:Take取值,TakeWhile当条件满足的时候才取值
//Skip跳过几个值,SkipWhile当条件满足的时候才进行跳值,主要用于分页
//var result = arr.Skip(3);//跳过三个值,余下的部分会全部输出
////var result = arr.Skip(3).Take(3);//跳过3个值,取3个值.
//result.Print();
//var result = arr.SkipWhile(p => p>4);//方法体部分是该linq语句提取数据的条件,当第一次遇到条件不成立的情况,就停止执行。
//result.Print();
//集合类
//var result = arr.Distinct();//Distinct()去掉重复的部分
//result.Print();
//生成类——(它是一个静态类)
//var result = System.Linq.Enumerable.Range(10,50);//Range生成一组从10取50个连续的数据
//var result = System.Linq.Enumerable.Range('a',26);//转换成相应的as码
//IEnumerable<int> ie = System.Linq.Enumerable.Range('a', 26);
//IEnumerator<int> result = ie.GetEnumerator();//GetEnumerator()返回一个循环访问集合的枚举器
////打印
//string sum = "";
//while (result.MoveNext())//.MoveNext()将枚举数推进到集合的下一个元素
//{
// sum += (char)result.Current + "\t";//Current获取集合中的当前元素
//}
//MessageBox.Show(sum);
//result.Print();
var result = System.Linq.Enumerable.Repeat(50,10);
result.Print();
}
/// <summary>
/// 拓展类,只要是静态就可以
/// </summary>
public static class ExtraClass
{
//为IEnumerable提供输出的方法
public static void Print(this IEnumerable<int> ie)
{
IEnumerator<int> result = ie.GetEnumerator();
string str = "";
while (result.MoveNext())
{
str += result.Current + "\t";
}
MessageBox.Show(str);
}