程序地带

.NETCORE中,对linq查询分页进行封装


之前实现了用sql拼接的方式对查询分页进行了封装后,虽然大部分业务场景都有包含,但是在项目中,一张表中存的可能全都是ID,需要跟其他表关联得到想要的结果,sql语句写的可能会很大段,能不能有更简单的方法呢

在实际代码中,可能使用linq比去写大段的sql更有效率。
使用linq进行查询将面临几个关键问题:


1.查询条件如何自动匹配
2.分页如何封装
3.一张表中可能全是基础信息的ID,如果使用linq关联查询,和写大段的sql并不方便多少,如何可以自动将想要的基础信息带出来
目前有一个简单的思路,还待完善,先记录一下
先在SqlRepositorys仓库类中写一下linq的分页


public IQueryable<T> SqlQueryAndParameter<T>(IQueryable<T> linqsql,RequestPages pages)
{
pages.count = linqsql.Count();
return linqsql.Skip((pages.pageNum - 1) * pages.pageSize).Take(pages.pageSize);
}

T中需要定义好查询结果,还需要建一个T的DTO,在DTO中包含其他的信息,如:ID对应的Name信息。借助AutoMapper,定义T=>TDto的对应,对Name信息进行映射时,用T中的ID值从数据库中去出Name


CreateMap<BT_Seller, BT_SellerDto>()
.ForMember(x=>x.WarehouseName,t=>t.MapFrom(item=>GetStockName(item.WarehouseId)));
private string GetStockName(int? WarehouseId)
{
var istockhelper = (IStockHelper)ServiceInstance.Instance?.GetService(typeof(IStockHelper));
var stock = istockhelper.GetStcokForStockId(WarehouseId);
return stock == null ? "" : stock.Warehouse;
}

这样,在service中只要查询那张想要查询的表,然后通过AutoMapper映射就可以获得需要返回给前端的给用户展示的数据了List了。
目前,问题2,3都可以得到解决,但是问题1,查询条件如何自动匹配的问题还没有太好的办法。就先记录一下吧,等以后再来还技术债


如果有好的想法,欢迎交流,一起成长


版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/bugenniduobb/p/14212434.html

随机推荐

Elasticsearch 7.10 之 Virtual memory

Elasticsearch默认使用mmapfs目录存储其索引。默认的操作系统对mmap计数的限制可能太低,这可能会导致内存不足异常。在Linux上,您可以通过以root用户...

王大丫丫 阅读(564)

实战PyQt5: 107-设置窗口背景

在一些特定情况下,我们需要设置窗口的背景,来实现某种特别的显示效果,比如如果是一个视频窗口,常常将背景设置为黑色,如果是一个要显示...

seniorwizard 阅读(755)

LeetCode226: 翻转二叉树(js)

题目:翻转一棵二叉树。示例:输入:4/27//1369输出:4/72//9631备注:这个问题是受到 MaxHowell 的 原问题...

我的大白菜呢 阅读(159)

Elasticsearch插件之分词器

程序员小强总结的ElasticSearch专题超全总结篇在这里:传送门结合官网资料,做了更详细的实际使用总结。从单机版安装到集群高可用生产环境搭建、基本概念(索引,分片,节点,倒排索引…...

程序员小强 阅读(360)