专栏名称: 数据分析与开发
伯乐在线旗下账号,分享数据库相关技术文章、教程和工具,另外还包括数据库相关的工作。偶尔也谈谈程序员人生 :)
目录
相关文章推荐
AustinDatabases  ·  哎,马上删,马上 ·  11 小时前  
终码一生  ·  如何加快 SQL 查询速度的同时保持 ... ·  20 小时前  
数据中心运维管理  ·  弱电智能化中究竟有多少个子系统? ·  2 天前  
数据中心运维管理  ·  超大规模数据中心如何重新思考冷却效率 ·  4 天前  
数据中心运维管理  ·  锂电池火灾处理难度 ·  3 天前  
51好读  ›  专栏  ›  数据分析与开发

为什么说 LINQ 要胜过 SQL

数据分析与开发  · 公众号  · 数据库  · 2017-03-22 20:01

正文

请到「今天看啥」查看全文


IQueryable query , int skip , int take )

{

return query . Skip ( skip ). Take ( take );

}


我们可以这样做:


var query = ...

var thirdPage = query . Paginate ( 20 , 10 );


更重要的是,在这里我们可以进行任意的分页查询。换言之就是通过 LINQ 你可以把查询分解成一部分,然后在你的应用程序中重用。


联合


LINQ 另一好处就是你可以不用 JOIN 就能进行关系间查询。例如,我们想要列出所有购物在 $1000 或者以上,并且居住在华盛顿的顾客。我们会假定让购买项目化(也就是经典的采购/项目采购场景)并且把(没有顾客记录的)现金销售也囊括进来。这就需要在四个表(Purchase, Customer, Address 以及 PurchaseItem)之间进行查询。使用 LINQ,这样的查询不费吹灰之力:


from p in db . Purchases

where p . Customer . Address . State == "WA" || p . Customer == null

where p . PurchaseItems . Sum ( pi => pi . SaleAmount ) > 1000

select p


将此与同等功能的 SQL 相比较:


SELECT p . *

FROM Purchase p

LEFT OUTER JOIN

Customer c INNER JOIN Address a ON c . AddressID = a . ID

ON p . CustomerID = c . ID

WHERE

( a . State = 'WA' || p . CustomerID IS NULL )

AND p . ID in

(

SELECT PurchaseID FROM PurchaseItem

GROUP BY PurchaseID HAVING SUM ( SaleAmount ) > 1000

)


对此例进一步扩展,假设我们想要将结果集按价格进行逆序排列,并在最终的投影中显示销售员的姓名以及所购买项目的数量。我们可以自然不重复地表达出这些附件的查询条件:


from p in db . Purchases

where p . Customer . Address . State == "WA" || p . Customer == null







请到「今天看啥」查看全文