211 lines
6.5 KiB
C#
211 lines
6.5 KiB
C#
using langguanApi.Model;
|
|
using Microsoft.AspNetCore.Http;
|
|
using Microsoft.AspNetCore.Mvc.RazorPages;
|
|
using MongoDB.Driver;
|
|
using System.Linq.Expressions;
|
|
|
|
namespace langguanApi.Service
|
|
{
|
|
public class BaseService<T> where T : BaseModel
|
|
{
|
|
private readonly IMongoCollection<T> _collection; //数据表操作对象
|
|
/// <summary>
|
|
/// 构造
|
|
/// </summary>
|
|
/// <param name="config"></param>
|
|
/// <param name="tableName"></param>
|
|
public BaseService(IConfiguration config, string tableName)
|
|
{
|
|
|
|
var client = new MongoClient(config.GetSection("ConnectionStrings:MongoDBConn").Value); //获取链接字符串
|
|
var database = client.GetDatabase(config.GetSection("ConnectionStrings:DBName").Value);
|
|
_collection = database.GetCollection<T>(tableName);
|
|
if (_collection == null)
|
|
{
|
|
database.CreateCollection(tableName);
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// 获取所有
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
public List<T> Get()
|
|
{
|
|
return _collection.Find(T => true).ToList();
|
|
}
|
|
/// <summary>
|
|
/// 获取单个
|
|
/// </summary>
|
|
/// <param name="id"></param>
|
|
/// <returns></returns>
|
|
public T Get(string id)
|
|
{
|
|
return _collection.Find<T>(T => T.Id == id).FirstOrDefault();
|
|
}
|
|
/// <summary>
|
|
/// 创建
|
|
/// </summary>
|
|
/// <param name="T"></param>
|
|
/// <returns></returns>
|
|
public T Create(T T)
|
|
{
|
|
_collection.InsertOne(T);
|
|
return T;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 更新
|
|
/// </summary>
|
|
/// <param name="id"></param>
|
|
/// <param name="TIn"></param>
|
|
public void Update(string id, T TIn)
|
|
{
|
|
_collection.ReplaceOne(T => T.Id == id, TIn);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 删除
|
|
/// </summary>
|
|
/// <param name="TIn"></param>
|
|
public void Remove(T TIn)
|
|
{
|
|
_collection.DeleteOne(T => T.Id == TIn.Id);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 根据id删除
|
|
/// </summary>
|
|
/// <param name="id"></param>
|
|
public void Remove(string id)
|
|
{
|
|
_collection.DeleteOne(T => T.Id == id);
|
|
}
|
|
#region 异步操作
|
|
/// <summary>
|
|
/// 取列表
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
public async Task<List<T>> GetAsync()
|
|
{
|
|
return await _collection.Find(T => true).ToListAsync();
|
|
}
|
|
/// <summary>
|
|
/// 取单条
|
|
/// </summary>
|
|
/// <param name="id"></param>
|
|
/// <returns></returns>
|
|
public async Task<T> GetAsync(string id)
|
|
{
|
|
return await _collection.Find<T>(T => T.Id == id).FirstOrDefaultAsync();
|
|
}
|
|
/// <summary>
|
|
/// 新增
|
|
/// </summary>
|
|
/// <param name="T"></param>
|
|
/// <returns></returns>
|
|
public async Task<T> CreateAsync(T T)
|
|
{
|
|
await _collection.InsertOneAsync(T);
|
|
return T;
|
|
}
|
|
/// <summary>
|
|
/// 新增
|
|
/// </summary>
|
|
/// <param name="T"></param>
|
|
/// <returns></returns>
|
|
public async Task CreateManyAsync(IEnumerable<T> T)
|
|
{
|
|
await _collection.InsertManyAsync(T);
|
|
}
|
|
/// <summary>
|
|
/// 更新
|
|
/// </summary>
|
|
/// <param name="id"></param>
|
|
/// <param name="TIn"></param>
|
|
/// <returns></returns>
|
|
public async Task UpdateAsync(string id, T TIn)
|
|
{
|
|
await _collection.ReplaceOneAsync(T => T.Id == id, TIn);
|
|
}
|
|
/// <summary>
|
|
/// 删除
|
|
/// </summary>
|
|
/// <param name="id"></param>
|
|
/// <returns></returns>
|
|
public async Task RemoveAsync(string id)
|
|
{
|
|
await _collection.DeleteOneAsync(T => T.Id == id);
|
|
}
|
|
|
|
#endregion
|
|
/// <summary>
|
|
/// 表达式取数据
|
|
/// </summary>
|
|
/// <param name="expression"></param>
|
|
/// <returns></returns>
|
|
public Task<IQueryable<T>> GetListWithExp(Expression<Func<T, bool>> expression)
|
|
{
|
|
// var temp = _collection.AsQueryable<T>().Where(expression).ToList();
|
|
return Task.FromResult(_collection.AsQueryable<T>().Where(expression));
|
|
}
|
|
/// <summary>
|
|
/// 表达式计数
|
|
/// </summary>
|
|
/// <param name="expression"></param>
|
|
/// <returns></returns>
|
|
public Task<long> Count(Expression<Func<T, bool>> expression)
|
|
{
|
|
return Task.FromResult(_collection.AsQueryable<T>().Where(expression).LongCount());
|
|
}
|
|
/// <summary>
|
|
/// filter查找
|
|
/// </summary>
|
|
/// <param name="filter"></param>
|
|
/// <returns></returns>
|
|
public async Task<List<T>> FindListByFilter(Expression<Func<T, bool>> filter)
|
|
{
|
|
FilterDefinition<T> filters = Builders<T>.Filter.Where(filter);
|
|
return await _collection.Find(filters).ToListAsync();
|
|
|
|
}
|
|
/// <summary>
|
|
/// filterdefinition
|
|
/// </summary>
|
|
/// <param name="filter"></param>
|
|
/// <returns></returns>
|
|
public async Task<List<T>> FindListyFilter(FilterDefinition<T> filter)
|
|
{
|
|
return await _collection.Find(filter).ToListAsync();
|
|
}
|
|
/// <summary>
|
|
/// 是否存在
|
|
/// </summary>
|
|
/// <param name="expression"></param>
|
|
/// <returns></returns>
|
|
public Task<bool> Exist(Expression<Func<T, bool>> expression)
|
|
{
|
|
var result = _collection.AsQueryable().Where(expression).Any();
|
|
return Task.FromResult(result);
|
|
}
|
|
/// <summary>
|
|
/// 分页取数据
|
|
/// </summary>
|
|
/// <param name="req"></param>
|
|
/// <param name="exp"></param>
|
|
/// <returns></returns>
|
|
public async Task<ApiResult> GetPager(ReqPaing req, Expression<Func<T, bool>> exp = null)
|
|
{
|
|
req.pageSize = req.pageSize == 0 ? 10 : req.pageSize;
|
|
var query = await GetListWithExp(exp);
|
|
var total = query.Count();
|
|
var items = query.OrderByDescending(s => s.CreateDateTime)
|
|
.Skip(req.pageSize * (req.current - 1)).Take(req.pageSize).ToList();
|
|
return new ApiResult()
|
|
{
|
|
code = 0,
|
|
data = new { total, items }
|
|
};
|
|
}
|
|
}
|
|
}
|