ASP.NET中Linq的使用

LINQ学习总结:
LINQ使用的关键字 :select, filter, sort, group, and transform data.
1.LINQ to Objects:查找内存中的对象集合。
2.LINQ to XML:可以不通过C#类直接读取XML文档。
3.LINQ to Entities:不写读取数据库的代码便可以读取数据库信息。

[b]一、LINQ基础知识[/b]
其中,最简单的就是LINQ to Objects,通过这种方式,可以不用在C#中写迭代循环语句(foreach),
例如,你想查找名字以D开头的员工信息,[color=red]按照foreach的传统方式[/color],可以如下描述:
// 通过Helper方法获取员工集合
List<EmployeeDetails> employees = db.GetEmployees();
// 查找所有符合条件的员工集合(即名字以D开头的)
List<EmployeeDetails> matches = new List<EmployeeDetails>();
foreach (EmployeeDetails employee in employees)
{
if (employee.LastName.StartsWith("D"))
{
matches.Add(employee);
}
}
//通过GridView展示数据
gridEmployees.DataSource = matches;
gridEmployees.DataBind();

[color=red]我们可以用LINQ方式重写以上代码[/color]:
List<EmployeeDetails> employees = db.GetEmployees();
IEnumerable<EmployeeDetails> matches;
matches = from employee in employees
where employee.LastName.StartsWith("D")
select employee;
//通过GridView展示数据
gridEmployees.DataSource = matches;
gridEmployees.DataBind();

注意,LINQ返回的结果是实现了IEnumerable<T>的iterator对象。

LINQ是如何执行查询或者过滤结果的呢?
答案: 它是通过数据类型进行查询的,例如查询LINQ to Entities ,它是把LINQ表达式转换成数据库执行语句。因此,它必须与数据库进行连接。

所有的LINQ语句必须要包含select 和from 关键字,
例如 matches = from employee in employees ...;
in,表示要操作的数据源; from,则表示数据源中不可分割的数据项的别名,可以在后面的过滤,排序或者分组等条件中直接使用这个别名。

[color=brown]注意,与直接用foreach操作集合相比较,LINQ的方式效率通常会较低。[/color]

LINQ有一个非常有意思的用法,那就是你可以把你要查询的某些数据动态的创建一个匿名对象保存你需要的信息:
例如:var matches = from employee in employees
select new {First = employee.FirstName, Last = employee.LastName};

通过此方式,便 可以返回隐式创建的对象集合,集中中的对象只有First和Last属性。

如果你不想使用匿名对象,你也可以选择定义一个新的类,然后再LINQ中直接使用它,如下例子:

类:
public class EmployeeName
{
public string FirstName
{ get; set; }
public string LastName
{ get; set; }
}
LINQ查询:
IEnumerable<EmployeeName> matches = from employee in employees
select new EmployeeName {FirstName = employee.FirstName,
LastName = employee.LastName};

因为属性都是 public的,所以LINQ创建对象,并为对象的属性赋值,最后生成结果集。

[b]Filtering and Sorting[/b]
1.在前面的例子中,我们已经使用过了where过滤条件语句:
IEnumerable<EmployeeDetails> matches;
matches = from employee in employees
where employee.LastName.StartsWith("D")
select employee;

其中,where后面跟的是条件判断语句,根据每一个item的值进行判断,如果是true则包含在结果结果当中,为false则不包含在结果中。 而且,条件表达式可以用"&&(and)","||(or)",以及关系关系操作符(">","<","=")等等符号进行连接。

2.LINQ表达式有一个挺有用的特征就是:可以在语句中调用自定义的方法,只要该方法返回true or false就可以了,请看下面的例子:
[i]Method:[/i]
private bool TestEmployee(EmployeeDetails employee)
{
return employee.LastName.StartsWith("D");
}
[i]LINQ:[/i]
IEnumerable<EmployeeDetails> matches;
matches = from employee in employees
where TestEmployee(employee)
select employee;

3.关于order by 的用法说明:
先看简单的说明例子:
IEnumerable<EmployeeDetails> matches;
matches = from employee in employees
orderby employee.LastName, employee.FirstName
select employee;

其中,排序的类型一般是实现了IComparable接口的,如date,string,numeric data等.Net的数据类型都实现了该接口。但是,我们也可以使用没有实现IComparable接口的类型,后面再对其进行详细说明。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值