一个简单的单表查询
第一: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()属性。
第四:如何实现传统SQL中的in和not in, 我们可以利用Contains()来实现。拉姆达表达式支持。
var q = 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'。
总结:select操作对于以数据查询为主的应用程序来说特别重要,了解它的原理后才能写出高效的应用程序。