LINQ TO SQL中的select
select这个关键字对于从事数据库开发或者是和数据库相关开发的程序员都特别熟悉,因为它是DML四大语法之一:查询操作。我个人认为的select简单结构:
2:多表查询(例如:from a in Orders),即在第一个from 语法后再来一个或多少;
3:条件表达示(例如:where p.ID>5);
4:分组表达式(例如group p by p.ID);
5:排序表达式(例如:orderby p.ID);
6:select 要读取的字段信息(例如:p.ID)。
说明:
1:1和6是一定要有的,否则会编译错误。
2:多表查询可以参考如下文章:
3:分组可以参数这篇文章:LINQ TO SQL 中的group
下面是最简单的单表查询:接下来我对上面的6个部分的其中几个部分详细而简单的说明下:
select p
第一:select的用法,因为关系到最后的查询结果,所以是开发员最关心的地方。
1:可以直接是一个对象,即不指明任何字段,像上面的select p,这相当于读取p对应表的所有字段,在传统SQL中就是select *的意思,一般实际应用中不推荐这样做,除非字段特别少而且都是要输出的内容。
1>:select p,读取全部字段;
2>:select p.ID,一个表的一个字段;
3>:select p.ID,p.Name,一个表的多个字段;
4>:select p.ID,A.OrderID,多个表的多个字段。
{
p.Name,
n.Address
};
4:可以指定一个匿名对象:
{
Name=p.Name,
Address=n.Address
};
5:字段和对象不能混合使用,下面的用法都是错误的:
select new
{
Name=p.Name,
Address=n.Address
};
select p.ID,
new
{
Name=p.Name,
Address=n.Address
};
6:如何进行子查询,在select表达式中就可以完成。
select new
{
c.Name,
Purchases =
from p in Purchases
where p.CustomerID == c.ID && p.Price > 1000
select new { p.Description, p.Price }
}
7:子查询时给表加上别名,主要是利用let关键字。
let highValue =
from p in c.Purchases
where p.Price > 1000
select new { p.Description, p.Price }
select new
{
c.Name,
Purchases = highValue
}
上面的查询也可以写成:
select new
{
c.Name,
Purchases = from p in c.Purchases
where p.Price > 1000
select new { p.Description, p.Price }
}
第二:select 完成后,就要考虑如何排序了。主要是应用orderby 关键字,descending为降序,否则为升序。
orderby p.Price descending, p.Description
select p
第三:如何过滤掉重复记录,我们可以使用Distinct()属性。
select p.ID).Distinct();
第四:如何实现传统SQL中的in和not in, 我们可以利用Contains()来实现。拉姆达表达式支持。
Customers.Where (c => c.Name.Contains ("a"))
第五:如何实现传统SQL中的LIKE表达式:拉姆达表达式支持。
1:Customers.Where (c => c.Name.Contains ("a")) ,相当于Like '%a%'。2:分两种写法:
1>:Customers.Where (c => c.Name.StartsWith ("a")),相当于Like 'a%'。
2>:Customers.Where (c => c.Name.EndsWith ("a")),相当于Like '%a'。
3>:自己扩展一个LIKE的方法。我会在下面的文章中试试扩展LINQ TO SQL的方法。
注:
文中参考nutshell示例