一对多数据的多选筛选([EF,ABP]但是sql思路通用)

一对多数据的多选筛选([EF,ABP]但是sql思路通用)

标题起的并不是特别准确,但是现在又没有更加准确的描述,暂时这样了

业务需求:

数据格式为一条数据,对应多条二级数据,暂时表示为主信息为“书”,二级为他的各种描述信息:1.社会科学-学术类-自定义文字,2.科技信息-学术类-自定义文字,然后搜索即是社会科学又是科技信息的数据。有点ES的味道了,但是小项目,不用太大组件,于是想办法SQL语句解决。如下为EF的解决办法

代码如下:

input.Construction = input.Construction.Distinct().ToList();//去除重复,防止脏数据
int num=input.Construction.Count ;//获取数量
var query2 = _bookInfoRepository.GetAll()
    .Where(m => input.Construction.Contains(m.Code))//获取所有关联的
    .GroupBy(m => new { m.Code, m.Rid })    //分组获取不重复的数据
    .Select(m => new { m.Key.Rid, m.Key.Code })
    .GroupBy(m => new { m.Rid })       //再次分组,用于获取不重复的数量
    .Select(m => new { m.Key.Rid, num = m.Count() })
    .Where(m => m.num == num)          //当数量一致的时候,即为包含所有类型子级的信息
    .Select(m => m.Rid);               //获取父级的ID

var list = query
    .Join(query2, m => m.Id, n => n, (m, n) => m) //通过左连接关联,获取到所有的主数据
    .OrderBy(m => m.Id)
    .ToPagedList(input.page, input.length);
posted @ 2023-05-14 22:46  静坐仰望星空  阅读(47)  评论(0)    收藏  举报