LinQ中的基本查询操作和SQL中的功能是一样的,对于其异同点,我们来了解了解:
1)Select
语法:
<span style="font-family:SimHei;font-size:18px;"> public static IEnumerable<TResult> Select<TSource,TResult>(
this IEnumerable<TSource>source,Func<TSource,TResult>selector)</span>
说明:
- Select方法本身是一个泛型集合扩展方法
- 它作用于IEnumerable<TSource>类型
- 它只接受一个Func<TSource,TResult>类型参数
- Func<TSource,TResult>是一个泛型委托,位于System名字空间下,System Core dll中,在这里selector是一个提取器。
2)Where
语法:
<span style="font-family:SimHei;font-size:18px;">public static IEnumerable<TSource> Where<TSource>(this IEnumerable<TSource>source,Func<TSource,bool>predicate)</span>
说明:
- Where方法也是一个泛型扩展方法
- 它和Select()一样作用于IEnumerable<TSource>类型
- 它只接受一个Func<TSource,bool>泛型委托参数
- 在这里predicate是一个判断条件
3)Group 语法:
public static IEnumerable<IGrouping<TKey.TSource>>GroupBy<TSource.TKey>
(this IEnumerable<TSource>source,Func<TSource,TKey>keySelector)<span style="font-family: SimHei; background-color: rgb(255, 255, 255);"> </span>
4)举例:
首先我们来写一个扩展类,为IEnumerablet<string>提供输出的方法
<span style="font-family:SimHei;font-size:18px;"> //扩展类,只要是静态就可以
public static class ExtraClass
{
//为IEnumerablet<string>提供输出的方法
public static void Print(this IEnumerable<string> ie)
{
//获取可遍历的接口
IEnumerator<string> result = ie.GetEnumerator();
Console.WriteLine("\n-------------------------------------\n");
while (result.MoveNext())
{
Console.WriteLine(result.Current);
}
Console.WriteLine("\n---------------------------------------\n");
}
}</span>
写一个泛型集合,为其存放几条数据:
<span style="font-family:SimHei;font-size:18px;"> private void BtnSelect_Click(object sender, EventArgs e)
{
//LinQ to Objects
//泛型集合数据persons
List<string> persons = new List<string>();
persons.Add("li si");
persons.Add("meng meng");
persons.Add("huo huo");
persons.Add("niu nan");
persons.Add("hu hu");
persons.Add("tu zi");
persons.Add("huo er");
persons.Add("huo xu");</span>
这样我们就可以根据选择来显示输出结果:
1、输出person中所有元素:
<span style="font-family:SimHei;font-size:18px;"> //输出person中所有的元素
var result=persons.Select(p => p);</span>
显示结果:
2、输出person中姓huo的(以下三种语句都显示同样的效果)
<span style="font-family:SimHei;font-size:18px;"> //输出person中姓huo的(以下三种语句都必答同样的效果)
//var result=persons.Where(p=>p.StartsWith("huo"));
//var result = persons.Select(p=>p).Where(p => p.StartsWith("huo"));
//var result = persons.Where(p => p.StartsWith("huo")).Select(p=>p);</span>
显示的效果:
当然,也可以直接使用Where,利用bool委托参数来执行,
<span style="font-family:SimHei;font-size:18px;"> var result=persons.Where(p=>Judge(p));
result.Print();
}
public bool Judge(string s)
{
if (s.StartsWith("huo"))
{
return true;
}
else
{
return false;
}
}</span>
显示效果一样,但是却直接显示了Where()语句的用法
对于Group的使用,我们可以使用其实现按照姓氏来显示名字如下:
//按照姓名来分组-取出姓名中的空格前的部分
var result=persons.GroupBy(p=>p.Split(new char[]{' '})[0]);
foreach (var group in result) //循环姓氏显示出来
{
Console.WriteLine("姓:" + group.Key);
foreach (var name in group) //根据姓氏显示所对应的名字
{
Console.WriteLine("\t" + name); //格式调整
}
Console.WriteLine();
}
显示效果:
举得例子也只是一些常用的查询语句,其他的在继续学习中!