
本是sql to linq的东西,但是用的框架是.core 2.1,所以就归到core里吧
最近遇到一个稍微复杂点的小问题
需求:商城的商品列表排序,按商品排序编号,同商品下sku的最低价来升降排序
开始做成拆分为几步,代码比较复杂,效率不高,后面找到了简单的解决方案:
- List<ProListModel> ProList = new List<ProListModel>();
-
- var query = (from pro in context.ShopProductInfo.Where(@where)
- join sku in context.ShopSkuProduct.Where(skuwhere)
- on pro.ProductNo equals sku.ProductNo
- group sku by sku.ProductNo into g
- select new ProListModel
- {
- Id = context.ShopProductInfo.SingleOrDefault(c => c.ProductNo == g.Key).Id,
- ProductName = context.ShopProductInfo.SingleOrDefault(c => c.ProductNo == g.Key).ProductName,
- ProductNo = g.Key,
- Type = context.ShopProductInfo.SingleOrDefault(c => c.ProductNo == g.Key).Type,
- ShortDesc = context.ShopProductInfo.SingleOrDefault(c => c.ProductNo == g.Key).ShortDesc,
- ThumbImage = context.ShopProductInfo.SingleOrDefault(c => c.ProductNo == g.Key).ThumbImage,
- CategoryId = context.ShopProductInfo.SingleOrDefault(c => c.ProductNo == g.Key).CategoryId,
- Price = g.OrderBy(c => c.SalePrice).FirstOrDefault().SalePrice,
- ShowOrder = context.ShopProductInfo.SingleOrDefault(c => c.ProductNo == g.Key).ShowOrder,
- }).AsQueryable();
-
- if (parameter.Sort == "desc")
- {
- query = query.OrderByDescending(p => p.Price);
- }
- else if (parameter.Sort == "asc")
- {
- query = query.OrderBy(p => p.Price);
- }
- else
- {
- query = query.OrderByDescending(p => p.CreateTime).OrderBy(p => p.ShowOrder);
- }
-
- result.Total = query.ToList().Count();
-
- result.Data = new GetProductListResult
- {
- ProList = query.Skip(parameter.PageSize * (parameter.PageIndex - 1))
- .Take(parameter.PageSize)
- .ToList(),
- };
这里主要是归纳一下两表联查的时候根据不同顺序,不同字段排序的优解方案以及Linq分组后进行表内排序的语法
/*----------------------------------------- 分 鸽 线 -------------------------------------------*/
上面的方法虽然解决了问题,但是放到实际场景时。接口处理的速度很慢,不传筛选的参数大概3s,传了有时候会到4~5s之久
所以又找了很多方法,各种尝试
一个半小时奋战,终于得到跟简单的方法
- var query = (from sku in context.ShopSkuProduct.Where(skuwhere)
- .GroupBy(o => o.ProductNo)
- .Select(o => new
- {
- ProductNo = o.Key,
- Saleprice = o.Min(x => x.SalePrice)
- })
- join pro in context.ShopProductInfo.AsNoTracking().Where(@where)
- on sku.ProductNo equals pro.ProductNo
- select new ProListModel
- {
- ProductName = pro.ProductName,
- ProductNo = pro.ProductNo,
- ThumbImage = pro.ThumbImage,
- Price = sku.Saleprice,
- CreateTime = pro.CreateTime,
- ShowOrder = pro.ShowOrder,
- }).AsQueryable();
把原来的query部分换成新的,速度飞快
hiahiahia~~perfect
评价
排名
59
文章
6
粉丝
2
评论
2
配置Java环境
剑轩 : 现在有些不是一键安装就搞定了么~
C#解决execl中的ROUNDUP函数
剑轩 : 楼掰楼掰,好方法
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:
50010702506256


欢迎加群交流技术