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

目录

说明

与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();

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

posted @ 2017-04-19 16:24  编程老男孩  阅读(10440)  评论(0编辑  收藏  举报