学习simple.data之进阶篇

数据库查询技巧
本文介绍了数据库查询中的关键操作,包括结果排序、表连接、聚合函数及帮助函数等实用技巧。通过具体示例展示了如何进行升序、降序排列,实现自然连接、级联查询,以及使用聚合函数进行数据统计。

一、结果排序

-OrderBy(升序)

-OrderByDescending(降序)

db.Product.All().OrderByFactoryName();
db.Product.All().OrderByFactoryNameDescending();

db.Product.All().OrderBy(db.Product.FactoryName);
db.Product.All().OrderByDescending(db.Product.FactoryName);

二、表连接

1 、无外键约束

1.1 自然连接

-Join

-Left Join

-Outer Join

var q = _db.Order.Query()
.Join(_db.OrderDetail, )
.Where(_db.OrderDetail.UnitPrice > 15000);
List<dynamic> employees = q.Select(_db.Order.OrderCode, q.OrderDetail.CategoryName).ToList();

1.2、级联查询

-With

-WithOne

-WithMany

dynamic OrderDetailAlias;
var OrderDetails = db.Order.All()
.With(db.Order.OrderDetail.As("OrderDetailInfo"), out OrderDetailAlias) 
.Select( db.Order.OrderCode, BandAlias.Name);

 

 

2、外键约束

2.1、单个数据集返回

var orders = _db.Order.FindAllByCustomerId(10)
.Select(_db.Order.OrderCode, q.Order.OrderDetail.CategoryName);

(利用数据库外键)

 

var orders = _db.Order.FindAllByCustomerId(10)
.Select(_db.Order.OrderCode, _db.OrderDetail.CategoryName)
.Join(_db.OrderDetail).On(OrderId: _db.Order.PKID);

(替代外键)

var orders = _db.Order.FindAllByCustomerId(10)
.Select(_db["Order"]["OrderCode"], _db["OrderDetail"]["CategoryName"])
.Join(_db["OrderDetail"]).On(OrderId: _db["Order"]["PKID"]);

(替代外键-索引写法)

三、聚合函数

1、Having

var orderDetails= db.OrderDetail.All()
.Select(db.OrderDetail.Order.OrderCode, 
        db.OrderDetail.PKID.Count().As("OrderDetailCount"))
.Having(db.OrderDetail.PKID.Count() > 2);

 

2、Max、Min、Sum、Count、Avg

var orderDetails=db.OrderDetail.All().Having(db.OrderDetail.UnitPrice.Max()>100);
var orderDetails=db.OrderDetail.All().Having(db.OrderDetail.UnitPrice.Min()>100);

3、Count、CountDistinct

var orderDetails=db.OrderDetail.All().Select(db.OrderDetail.OrderId.Count());
var orderDetails=db.OrderDetail.All().Select(db.OrderDetail.OrderId.CountDistinct());去重数量

 

四、帮助函数

1、Length(字段长度)

var codeLength=db.Order.Select(db.Order.OrderCode.Length().As("CodeLength"));

2、转换为标量值

2.1、ToScalar、ToScalar<T>从查询结果中返回一个属性作为标量值

int id=db.Order.Get(1).ToScalar();
int id=db.Order.Select(db.Order.Id).Get(1).ToScalar();

 

2.2、ToScalarOrDefault、ToScalarOrDefault<T>从查询结果中返回一个属性作为标量值,这个值作为它的默认值。如果属性值为NULL,ToScalarOrDefault<T>返回default<T>

string orderCode=db.Order.FindAllById(1).Select(db.Order.OrderCode).ToScalarOrDefault();

 

2.3、ToScalarList、ToScalarList<T>从一系列查询结果中返回某个列表作为标量值

List<string> orderDetails=db.OrderDetail.FindAllByOrderId(1).Select(db.OrderDetail.CategoryName).ToScalarList<string>();

 

2.4、ToScalarArray、ToScalarArray<T>从一系列查询结果中返回某个数组作为标量值

string[] orderDetails=db.OrderDetail.FindAllByOrderId(1).Select(db.OrderDetail.CategoryName).ToScalarArray<string>();

 

待续...

转载于:https://www.cnblogs.com/hj4444/p/3975600.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值