LINQ 语言集成查询(Language INtegrated Query)作为.net平台的一项查询技术,给我们的开发带来了极大地方便。本人用2.0的平台时间较长,对LINQ用的不是太多。LINQ查询的数据源:实现IEnumberable<T>接口的对象、关系数据库、数据集(DataSets)以及xml文档。最近偶使用到它,谈谈一下使用基础与体会。
LINQ与T-Sql语法类似,有一些数据库基础的理解它应该不难。下面主要从我使用到的几个函数等来进行说明。
1、Except
2、Cast
3. Take、TakeWhile
4、Skip、SkipWhile
5、Lambda表达式基础
首先,还是从最基本的查询语法说起。由于LINQ查询结果是IEnumerable<T>,接收返回结果时定义为var比较简洁。最基本的查询语法为:from [parameters] in [dataSource] select [result].示例代码和截图还是最直接:
#代码
int[] arr1 = new int[] {1, 2, 3, 4, 5};
int[] arr2 = new int[] {1, 2, 5, };
var result = from a in arr1
join b in arr2 on a equals b into list
from r in list
select r;
foreach(var v in result)
{
Console.WriteLine(v.ToString());
}
输出结果如下:
以上的查询是将两个集合中相同的元素查出来,放入到list中,然后再从list中进行查询。
在Select中,也可以自定义需要选择的结果。如需要找出两个集合中相同元素的长度,代码如下:
string[] list1 = new string[] {"ab", "bc", "abd", "aaaa"};
string[] list2 = new string[] { "ab", "abd", "aabb","bb" };
var query = from s in list1
join m in list2 on s equals m
select new {s.Length};
foreach( var len in query)
{
Console.WriteLine(len.Length);
}
输出结果如下:
2,3
在查询时候用判断元素相等用的是equals,而不是编程语言中的"=="或者T-SQL中的"=",有点特别。
1、Except:返回查询两个集合中差异的元素。
var dif = arr1.Except(arr2);
foreach (var item in dif)
{
Console.WriteLine(item);
}
这样dif就包含3,4两个元素
2、Cast:对数据源中元素进行类型转化,转化的目标类型为Cast指定的泛型。
Console.WriteLine("Cast************");
object[] obj = new object[] {1,2,3};
var intResult = obj.Cast<int>();
foreach( var item in intResult)
{
Console.WriteLine("item :{0}",item.GetType().ToString());
1/2 1 2 下一页 尾页 |