|
|
@@ -1,8 +1,8 @@
|
|
|
-using AutoMapper.QueryableExtensions;
|
|
|
-using EFSecondLevelCache.Core;
|
|
|
+using EFSecondLevelCache.Core;
|
|
|
+using Masuit.LuceneEFCore.SearchEngine.Interfaces;
|
|
|
+using Masuit.MyBlogs.Core.Infrastructure.Application;
|
|
|
using Masuit.MyBlogs.Core.Infrastructure.Repository.Interface;
|
|
|
using Masuit.MyBlogs.Core.Infrastructure.Services.Interface;
|
|
|
-using NinjaNye.SearchExtensions;
|
|
|
using System;
|
|
|
using System.Collections.Generic;
|
|
|
using System.Data.SqlClient;
|
|
|
@@ -19,10 +19,13 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Services
|
|
|
public class BaseService<T> : IBaseService<T> where T : class, new()
|
|
|
{
|
|
|
public virtual IBaseRepository<T> BaseDal { get; set; }
|
|
|
-
|
|
|
- public BaseService(IBaseRepository<T> repository)
|
|
|
+ protected readonly ISearchEngine<DataContext> _searchEngine;
|
|
|
+ protected readonly ILuceneIndexSearcher _searcher;
|
|
|
+ public BaseService(IBaseRepository<T> repository, ISearchEngine<DataContext> searchEngine, ILuceneIndexSearcher searcher)
|
|
|
{
|
|
|
BaseDal = repository;
|
|
|
+ _searchEngine = searchEngine;
|
|
|
+ _searcher = searcher;
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
@@ -531,244 +534,6 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Services
|
|
|
return BaseDal.LoadPageEntitiesFromL2CacheNoTracking(pageIndex, pageSize, out totalCount, where, orderby, isAsc);
|
|
|
}
|
|
|
|
|
|
- /// <summary>
|
|
|
- /// 搜索
|
|
|
- /// </summary>
|
|
|
- /// <typeparam name="TOrder"></typeparam>
|
|
|
- /// <typeparam name="TDto"></typeparam>
|
|
|
- /// <param name="page">第几页</param>
|
|
|
- /// <param name="size">页大小</param>
|
|
|
- /// <param name="total">总条数</param>
|
|
|
- /// <param name="keywords">关键词</param>
|
|
|
- /// <param name="orderBy">排序字段</param>
|
|
|
- /// <param name="isAsc">升序排列?</param>
|
|
|
- /// <returns></returns>
|
|
|
- public List<TDto> SearchPage<TOrder, TDto>(int page, int size, out int total, string[] keywords, Expression<Func<T, TOrder>> orderBy, bool isAsc = true)
|
|
|
- {
|
|
|
- var query = GetAllNoTracking().Search().Containing(keywords);
|
|
|
- total = query.Count();
|
|
|
- IOrderedQueryable<T> order = isAsc ? query.OrderBy(orderBy) : query.OrderByDescending(orderBy);
|
|
|
- return order.Skip((page - 1) * size).Take(size).ProjectTo<TDto>().ToList();
|
|
|
- }
|
|
|
-
|
|
|
- /// <summary>
|
|
|
- /// 搜索
|
|
|
- /// </summary>
|
|
|
- /// <typeparam name="TOrder"></typeparam>
|
|
|
- /// <typeparam name="TDto"></typeparam>
|
|
|
- /// <param name="page">第几页</param>
|
|
|
- /// <param name="size">页大小</param>
|
|
|
- /// <param name="total">总条数</param>
|
|
|
- /// <param name="keywords">关键词</param>
|
|
|
- /// <param name="where">其他条件</param>
|
|
|
- /// <param name="orderBy">排序字段</param>
|
|
|
- /// <param name="isAsc">升序排列?</param>
|
|
|
- /// <returns></returns>
|
|
|
- public List<TDto> SearchPage<TOrder, TDto>(int page, int size, out int total, string[] keywords, Expression<Func<T, bool>> @where, Expression<Func<T, TOrder>> orderBy, bool isAsc = true)
|
|
|
- {
|
|
|
- var query = LoadEntities(where).Search().Containing(keywords);
|
|
|
- total = query.Count();
|
|
|
- IOrderedQueryable<T> order = isAsc ? query.OrderBy(orderBy) : query.OrderByDescending(orderBy);
|
|
|
- return order.Skip((page - 1) * size).Take(size).ProjectTo<TDto>().ToList();
|
|
|
- }
|
|
|
-
|
|
|
- /// <summary>
|
|
|
- /// 搜索
|
|
|
- /// </summary>
|
|
|
- /// <typeparam name="TOrder"></typeparam>
|
|
|
- /// <param name="page">第几页</param>
|
|
|
- /// <param name="size">页大小</param>
|
|
|
- /// <param name="total">总条数</param>
|
|
|
- /// <param name="keywords">关键词</param>
|
|
|
- /// <param name="orderBy">排序字段</param>
|
|
|
- /// <param name="isAsc">升序排列?</param>
|
|
|
- /// <returns></returns>
|
|
|
- public List<T> SearchPage<TOrder>(int page, int size, out int total, string[] keywords, Expression<Func<T, TOrder>> orderBy, bool isAsc = true)
|
|
|
- {
|
|
|
- var query = GetAll().Search().Containing(keywords);
|
|
|
- total = query.Count();
|
|
|
- IOrderedQueryable<T> order = isAsc ? query.OrderBy(orderBy) : query.OrderByDescending(orderBy);
|
|
|
- return order.Skip((page - 1) * size).Take(size).ToList();
|
|
|
- }
|
|
|
-
|
|
|
- /// <summary>
|
|
|
- /// 搜索
|
|
|
- /// </summary>
|
|
|
- /// <typeparam name="TOrder"></typeparam>
|
|
|
- /// <param name="page">第几页</param>
|
|
|
- /// <param name="size">页大小</param>
|
|
|
- /// <param name="total">总条数</param>
|
|
|
- /// <param name="keywords">关键词</param>
|
|
|
- /// <param name="where">其他条件</param>
|
|
|
- /// <param name="orderBy">排序字段</param>
|
|
|
- /// <param name="isAsc">升序排列?</param>
|
|
|
- /// <returns></returns>
|
|
|
- public List<T> SearchPage<TOrder>(int page, int size, out int total, string[] keywords, Expression<Func<T, bool>> @where, Expression<Func<T, TOrder>> orderBy, bool isAsc = true)
|
|
|
- {
|
|
|
- var query = LoadEntities(where).Search().Containing(keywords);
|
|
|
- total = query.Count();
|
|
|
- IOrderedQueryable<T> order = isAsc ? query.OrderBy(orderBy) : query.OrderByDescending(orderBy);
|
|
|
- return order.Skip((page - 1) * size).Take(size).ToList();
|
|
|
- }
|
|
|
-
|
|
|
- /// <summary>
|
|
|
- /// 搜索
|
|
|
- /// </summary>
|
|
|
- /// <typeparam name="TOrder"></typeparam>
|
|
|
- /// <param name="page">第几页</param>
|
|
|
- /// <param name="size">页大小</param>
|
|
|
- /// <param name="total">总条数</param>
|
|
|
- /// <param name="keywords">关键词</param>
|
|
|
- /// <param name="orderBy">排序字段</param>
|
|
|
- /// <param name="isAsc">升序排列?</param>
|
|
|
- /// <returns></returns>
|
|
|
- public List<T> SearchPageNotracking<TOrder>(int page, int size, out int total, string[] keywords, Expression<Func<T, TOrder>> orderBy, bool isAsc = true)
|
|
|
- {
|
|
|
- var query = GetAllNoTracking().Search().Containing(keywords);
|
|
|
- total = query.Count();
|
|
|
- IOrderedQueryable<T> order = isAsc ? query.OrderBy(orderBy) : query.OrderByDescending(orderBy);
|
|
|
- return order.Skip((page - 1) * size).Take(size).ToList();
|
|
|
- }
|
|
|
-
|
|
|
- /// <summary>
|
|
|
- /// 搜索
|
|
|
- /// </summary>
|
|
|
- /// <typeparam name="TOrder"></typeparam>
|
|
|
- /// <param name="page">第几页</param>
|
|
|
- /// <param name="size">页大小</param>
|
|
|
- /// <param name="total">总条数</param>
|
|
|
- /// <param name="keywords">关键词</param>
|
|
|
- /// <param name="where">其他条件</param>
|
|
|
- /// <param name="orderBy">排序字段</param>
|
|
|
- /// <param name="isAsc">升序排列?</param>
|
|
|
- /// <returns></returns>
|
|
|
- public List<T> SearchPageNotracking<TOrder>(int page, int size, out int total, string[] keywords, Expression<Func<T, bool>> @where, Expression<Func<T, TOrder>> orderBy, bool isAsc = true)
|
|
|
- {
|
|
|
- var query = LoadEntitiesNoTracking(where).Search().Containing(keywords);
|
|
|
- total = query.Count();
|
|
|
- IOrderedQueryable<T> order = isAsc ? query.OrderBy(orderBy) : query.OrderByDescending(orderBy);
|
|
|
- return order.Skip((page - 1) * size).Take(size).ToList();
|
|
|
- }
|
|
|
-
|
|
|
- /// <summary>
|
|
|
- /// 搜索
|
|
|
- /// </summary>
|
|
|
- /// <typeparam name="TOrder"></typeparam>
|
|
|
- /// <typeparam name="TDto"></typeparam>
|
|
|
- /// <param name="page">第几页</param>
|
|
|
- /// <param name="size">页大小</param>
|
|
|
- /// <param name="total">总条数</param>
|
|
|
- /// <param name="keywords">关键词</param>
|
|
|
- /// <param name="orderBy">排序字段</param>
|
|
|
- /// <param name="isAsc">升序排列?</param>
|
|
|
- /// <returns></returns>
|
|
|
- public List<TDto> SearchPageFromCache<TOrder, TDto>(int page, int size, out int total, string[] keywords, Expression<Func<T, TOrder>> orderBy, bool isAsc = true)
|
|
|
- {
|
|
|
- var query = GetAllNoTracking().Search().Containing(keywords);
|
|
|
- total = query.Count();
|
|
|
- IOrderedQueryable<T> order = isAsc ? query.OrderBy(orderBy) : query.OrderByDescending(orderBy);
|
|
|
- return order.Skip((page - 1) * size).Take(size).ProjectTo<TDto>().Cacheable().ToList();
|
|
|
- }
|
|
|
-
|
|
|
- /// <summary>
|
|
|
- /// 搜索
|
|
|
- /// </summary>
|
|
|
- /// <typeparam name="TOrder"></typeparam>
|
|
|
- /// <typeparam name="TDto"></typeparam>
|
|
|
- /// <param name="page">第几页</param>
|
|
|
- /// <param name="size">页大小</param>
|
|
|
- /// <param name="total">总条数</param>
|
|
|
- /// <param name="keywords">关键词</param>
|
|
|
- /// <param name="where">其他条件</param>
|
|
|
- /// <param name="orderBy">排序字段</param>
|
|
|
- /// <param name="isAsc">升序排列?</param>
|
|
|
- /// <returns></returns>
|
|
|
- public List<TDto> SearchPageFromCache<TOrder, TDto>(int page, int size, out int total, string[] keywords, Expression<Func<T, bool>> @where, Expression<Func<T, TOrder>> orderBy, bool isAsc = true)
|
|
|
- {
|
|
|
- var query = LoadEntities(where).Search().Containing(keywords);
|
|
|
- total = query.Count();
|
|
|
- IOrderedQueryable<T> order = isAsc ? query.OrderBy(orderBy) : query.OrderByDescending(orderBy);
|
|
|
- return order.Skip((page - 1) * size).Take(size).ProjectTo<TDto>().Cacheable().ToList();
|
|
|
- }
|
|
|
-
|
|
|
- /// <summary>
|
|
|
- /// 搜索
|
|
|
- /// </summary>
|
|
|
- /// <typeparam name="TOrder"></typeparam>
|
|
|
- /// <param name="page">第几页</param>
|
|
|
- /// <param name="size">页大小</param>
|
|
|
- /// <param name="total">总条数</param>
|
|
|
- /// <param name="keywords">关键词</param>
|
|
|
- /// <param name="orderBy">排序字段</param>
|
|
|
- /// <param name="isAsc">升序排列?</param>
|
|
|
- /// <returns></returns>
|
|
|
- public List<T> SearchPageFromCache<TOrder>(int page, int size, out int total, string[] keywords, Expression<Func<T, TOrder>> orderBy, bool isAsc = true)
|
|
|
- {
|
|
|
- var query = GetAll().Search().Containing(keywords);
|
|
|
- total = query.Count();
|
|
|
- IOrderedQueryable<T> order = isAsc ? query.OrderBy(orderBy) : query.OrderByDescending(orderBy);
|
|
|
- return order.Skip((page - 1) * size).Take(size).Cacheable().ToList();
|
|
|
- }
|
|
|
-
|
|
|
- /// <summary>
|
|
|
- /// 搜索
|
|
|
- /// </summary>
|
|
|
- /// <typeparam name="TOrder"></typeparam>
|
|
|
- /// <param name="page">第几页</param>
|
|
|
- /// <param name="size">页大小</param>
|
|
|
- /// <param name="total">总条数</param>
|
|
|
- /// <param name="keywords">关键词</param>
|
|
|
- /// <param name="where">其他条件</param>
|
|
|
- /// <param name="orderBy">排序字段</param>
|
|
|
- /// <param name="isAsc">升序排列?</param>
|
|
|
- /// <returns></returns>
|
|
|
- public List<T> SearchPageFromCache<TOrder>(int page, int size, out int total, string[] keywords, Expression<Func<T, bool>> @where, Expression<Func<T, TOrder>> orderBy, bool isAsc = true)
|
|
|
- {
|
|
|
- var query = LoadEntities(where).Search().Containing(keywords);
|
|
|
- total = query.Count();
|
|
|
- IOrderedQueryable<T> order = isAsc ? query.OrderBy(orderBy) : query.OrderByDescending(orderBy);
|
|
|
- return order.Skip((page - 1) * size).Take(size).Cacheable().ToList();
|
|
|
- }
|
|
|
-
|
|
|
- /// <summary>
|
|
|
- /// 搜索
|
|
|
- /// </summary>
|
|
|
- /// <typeparam name="TOrder"></typeparam>
|
|
|
- /// <param name="page">第几页</param>
|
|
|
- /// <param name="size">页大小</param>
|
|
|
- /// <param name="total">总条数</param>
|
|
|
- /// <param name="keywords">关键词</param>
|
|
|
- /// <param name="orderBy">排序字段</param>
|
|
|
- /// <param name="isAsc">升序排列?</param>
|
|
|
- /// <returns></returns>
|
|
|
- public List<T> SearchPageFromCacheNotracking<TOrder>(int page, int size, out int total, string[] keywords, Expression<Func<T, TOrder>> orderBy, bool isAsc = true)
|
|
|
- {
|
|
|
- var query = GetAllNoTracking().Search().Containing(keywords);
|
|
|
- total = query.Count();
|
|
|
- IOrderedQueryable<T> order = isAsc ? query.OrderBy(orderBy) : query.OrderByDescending(orderBy);
|
|
|
- return order.Skip((page - 1) * size).Take(size).Cacheable().ToList();
|
|
|
- }
|
|
|
-
|
|
|
- /// <summary>
|
|
|
- /// 搜索
|
|
|
- /// </summary>
|
|
|
- /// <typeparam name="TOrder"></typeparam>
|
|
|
- /// <param name="page">第几页</param>
|
|
|
- /// <param name="size">页大小</param>
|
|
|
- /// <param name="total">总条数</param>
|
|
|
- /// <param name="keywords">关键词</param>
|
|
|
- /// <param name="where">其他条件</param>
|
|
|
- /// <param name="orderBy">排序字段</param>
|
|
|
- /// <param name="isAsc">升序排列?</param>
|
|
|
- /// <returns></returns>
|
|
|
- public List<T> SearchPageFromCacheNotracking<TOrder>(int page, int size, out int total, string[] keywords, Expression<Func<T, bool>> @where, Expression<Func<T, TOrder>> orderBy, bool isAsc = true)
|
|
|
- {
|
|
|
- var query = LoadEntitiesNoTracking(where).Search().Containing(keywords);
|
|
|
- total = query.Count();
|
|
|
- IOrderedQueryable<T> order = isAsc ? query.OrderBy(orderBy) : query.OrderByDescending(orderBy);
|
|
|
- return order.Skip((page - 1) * size).Take(size).Cacheable().ToList();
|
|
|
- }
|
|
|
-
|
|
|
/// <summary>
|
|
|
/// 根据ID删除实体
|
|
|
/// </summary>
|