.net core 通用存储库功能的使用

.net core 通用存储库功能的使用,.net-core,ef-core-3.1,.net Core,Ef Core 3.1,我是EF Core的新手。以下是我要获取的存储库函数: public async Task GetAsync(表达式谓词=null,Func orderBy=null,字符串includeString=null,bool disableTracking=true) { IQueryable查询=_dbContext.Set(); if(disableTracking)query=query.AsNoTracking(); 如果(!string.IsNullOrWhiteSpace(include

我是EF Core的新手。以下是我要获取的存储库函数:

public async Task GetAsync(表达式谓词=null,Func orderBy=null,字符串includeString=null,bool disableTracking=true)
{
IQueryable查询=_dbContext.Set();
if(disableTracking)query=query.AsNoTracking();
如果(!string.IsNullOrWhiteSpace(includeString))query=query.Include(includeString);
if(谓词!=null)query=query.Where(谓词);
if(orderBy!=null)
return wait orderBy(query.ToListAsync();
return wait query.ToListAsync();
}
公共异步任务GetAsync(表达式谓词=null,Func orderBy=null,列表包含=null,bool disableTracking=true)
{
IQueryable查询=_dbContext.Set();
if(disableTracking)query=query.AsNoTracking();
如果(includes!=null)query=includes.Aggregate(query,(current,include)=>current.include(include));
if(谓词!=null)query=query.Where(谓词);
if(orderBy!=null)
return wait orderBy(query.ToListAsync();
return wait query.ToListAsync();
}
我知道如何设置过滤条件。我的问题是:如何调用Include和OrderBy

工作示例:

GetAsync(x=>x.Name.ToLower().Contains(productName.ToLower()))

包含不需要参数。若您在数据库中有关系,则可以将其用于include。它会自动获取所有表(与主表链接)

foreach (var property in _dbContext.Model.FindEntityType(typeof(T)).GetNavigations())
    query = query.Include(property.Name);
像这样

public async Task<IReadOnlyList<T>> GetAsync(Expression<Func<T, bool>> predicate = null, Func<IQueryable<T>, IOrderedQueryable<T>> orderBy = null, bool disableTracking = true)
    {
        IQueryable<T> query = _dbContext.Set<T>();
        if (disableTracking) query = query.AsNoTracking();

        foreach (var property in _dbContext.Model.FindEntityType(typeof(T)).GetNavigations())
            query = query.Include(property.Name);

        if (predicate != null) query = query.Where(predicate);

        if (orderBy != null)
            return await orderBy(query).ToListAsync();
        return await query.ToListAsync();
    }
public async Task GetAsync(表达式谓词=null,Func orderBy=null,bool disableTracking=true)
{
IQueryable查询=_dbContext.Set();
if(disableTracking)query=query.AsNoTracking();
foreach(_dbContext.Model.FindEntityType(typeof(T)).GetNavigations()中的var属性)
query=query.Include(property.Name);
if(谓词!=null)query=query.Where(谓词);
if(orderBy!=null)
return wait orderBy(query.ToListAsync();
return wait query.ToListAsync();
}
通用存储库

**

控制器 **

谢谢……但我需要使用get repository方法是的,您可以在get repository方法中使用它。编辑了这篇文章,让它更清晰。我删除了includeString参数。谢谢。如何在控制器/服务中调用此函数?只需调用GetAsync(x=>x.Name.ToLower().Contains(productName.ToLower());像往常一样。这就是全部。我给出的代码会自动为您获取所有包含的表格。我在编辑的帖子中添加了截图。Get table with include和Get table with all include性能几乎相同。