LINQ to SQL语句(1)Select查询的九种形式

时间:2021-02-14 01:04:41

目录

说明

与SQL命令中的select作用相似但位置不同,查询表达式select放在表达式的末尾。并把字句中的变量也就是查询结果返回回来。

简单形式

var q = from c in db.Products select c.ProductName;

上述语句描述:实例返回产品名称的序列。只是一个声明而已,但没有去查询数据,会生成了SQL语句,只有当我们需要该数据的时候,它才会执行这条语句,这就是所谓的延迟加载。如果返回是对象的结果集,可以用ToList()、ToArray()来保存该数据。

匿名类型形式

说明:匿名类型是C#3.0中的新特性。其本质是编辑器会自动生成一个匿名的类来存储我们的临时变量。如:var person = new {Name="Jack",Age=15},编辑器会自动创建一个匿名类,这个类有两个属性Name和Age,然后根据数据初始化对象。

  var t = from c in db.Products
select new
{
c.ProductName,
c.UnitPrice
};

上述语句描述:使用select和匿名类型返回产品的产品名称、产品单价的序列。

 var a = from c in db.Employees
select new
{
Name
= c.FirstName + c.LastName,
Phone
= c.HomePhone

};

上述语句描述:使用select和匿名类型返回雇员的姓名和手机号码的序列,并将FirstName和LastName合并为一个字段Name,将HomePhone重命名为Phoe。

条件形式

说明:生成SQL语句为:case when condition then else。

var b = from c in db.Products
select new
{
c.ProductName,
State
= c.UnitsInStock - c.UnitsOnOrder > 0 ? "Out Of Stock" : "In Stock"

};

上述语句描述:使用select和条件语句返回产品名称和产品的供货状态的序列。

指定类型形式

说明:该形式返回你自定义类型的对象集。

 var a = from c in db.Employees
select new Person
{
Name
= c.FirstName,
Phone
= c.HomePhone

};

上述语句描述:使用select和已知类型Person,返回姓名和手机号码的序列。

筛选形式

说明:结合Where起到筛选的作用。

   var d = from c in db.Products
where c.ProductName == "Aniseed Syrup" select c.UnitPrice;

上述语句说明:使用select和Where返回仅含产品名称为Aniseed Syrup的产品单价序列。

shaped形式

说明:select操作中使用了匿名对象,而在这个匿名对象中属性也包含匿名对象。

 var e = from c in db.Orders
select new
{
c.OrderID,
c.OrderDate,
Customer
= new { c.Customers.City, c.Customers.Address }

};

上述代码描述:使用select返回订单的ID、订单时间、订单客户所在的城市和地址序列。

嵌套形式

 说明:返回每个对象集中的DiscountedProducts属性,而此属性也是集合,也就是每个对象的属性结合。

  var u = from o in db.Orders
select new
{
o.OrderID,
DiscountedProducts
=
from od in o.Order_Details
where od.Discount > 0.0
select od,
FreeShippingDiscount
= o.Freight
};

上述代码描述:使用嵌套查询返回所有订单的OrderID的序列、打折订单中项目的子序列以及免送货所省下的金额。

本地调用方法形式

说明:在本例查询中,调用本地方法来判断单价是否大于20,并返回信息。

var m = from g in db.Products.ToList()
select new
{
g.ProductID,
g.ProductName,
g.UnitPrice,
message
= GetMessage(g.UnitPrice)

};

 GetMessage方法如下:

 public string GetMessage(Nullable<decimal> price)
{
if (price > 20)
{
return "单价大于20元";
}
else
{
return "单价小于20元";
}
}

 Distinct形式

说明:筛选不相同的值,用于查询结果集中不重复的数据。

var k = (from j in db.Orders select j.ShipCity).Distinct();

 上述代码描述:查询订单覆盖的城市。