原文地址:http://www.dingos.cn/index.php?topic=1976.0
在每种语言中对数据或集合操作是非常重要和麻烦的。为了对数据或集合操作更简化和有力,LINQ被结合到.NET Framework 3.5中。可以调用更有力的工具LINQ来操作数据。
在开始讨论LINQ之前,先获取一些LINQ的基础知识。
当LINQ用于处理关系型数据库被称为Dlinq,也成为LINQ to SQL。当LINQ用于处理xml是给称为XLinq,也称为LINQ to XML。
示例:
首先考虑一个简单的例子,仅仅针对string数组工作,一步一步的深入对集合和数据的工作。
在第一个例子中,使用LINQ在string数组中查找长度大于6的名字。
using System;
using System.Collections;
using System.Linq;
class Test{
static void Main(string[] args){
// 声明字符串数组
string[] names = {"arun", "ram", "karthi" ,
"arulkumar","balaji","dineshKumar"};
// 从linq中存储结果
IEnumerable nameCollecetion = from n in names
where n.Length > 6
select n;
// 打印结果
foreach (string name in nameCollecetion)
Console.WriteLine(name);
Console.ReadKey();
}
}
在上面的例子中,from n in names有点类似于类似于foreach循环,考虑上面代码使用foreach如下实现:
foreach(string n in names){
if(n.length>6)
nameCollection.add(n);
}
我想现在对上面linq的例子有点想法。
也可以在linq中做一些聚合操作,一个简单的数学计算。
示例:使用linq查找最大数和最小数。
static void Main(string[] args){
int[] numbers = { 8, 4, 5, 6, 9, 7, 77, 55, 66, 99, 22, 55, 45 };
// 找最小值
int minno = numbers.Min();
// 找最大值
int maxno = numbers.Max();
Console.WriteLine(minno);
Console.WriteLine();
Console.WriteLine(maxno);
Console.ReadKey();
}
var
首先看到在LINQ中使用var关键字。当C#编译器遇到了var会检测变量右边的数据类型,然后将左边的变量转换为这个类型。
// 转换intvar为整型
var intvar=10;
// 转换stringvar为string类型
var stringvar="string";
// 转换charvar为字符类型
var charvar='a';
现在看一个和上面使用linq相同的例子。例如查找names中长度大于6的名字。
string[] names = { "arun", "ram", "karthi", "arulkumar", "balaji",
"dineshKumar" };
// longnames转换为字符串数组用于存储LINQ查询返回的结果
var longnames = from n in names
where n.Length > 6
select n;
// 打印出longnames中所有的值
foreach (var name in longnames)
Console.WriteLine(name);
Console.ReadKey();
LINQ中集合的使用
使用LINQ操作简单的类和集合。首先创建一个(Employee)类具有id和name属性。
public class Employee{
private string _empID;
private string _empName;
public Person(){}
public string EmpID{
get { return _empID; }
set{_empID = value; }
}
public string EmpName{
get { return _empName; }
set {_empName = value; }
}
}
现在创建一个Employee对象集合。
List emp = new List{
new Employee{EmpID =1,EmpName="priya",Sex="Female"},
new Employee{EmpID =2,EmpName="Arun",Sex="Male"},
new Employee{EmpID =3,EmpName="Balaji",Sex="Male"},
new Employee{EmpID =4,EmpName="Aruna",Sex="Female"}};
// 选择男职员并按他们的名字排序
var maleEmps = from empl in emp
where empl.Sex == "Male"
orderby empl.EmpName
select empl;
// 定义出男职员的ID和名字
foreach (var person in maleEmps)
Console.WriteLine(person.EmpID + " " + person.EmpName);
Console.ReadKey();