创建请求的概括

我在项目中使用EF Core 3.0,现在尝试实现自己的概括。

public class DatabaseQueryObject
{
    public string DbName { get; set; }
    public ICollection<string> Tables { get; set; }
    public Type RequestedDataType { get; set; }
    public string? Filter { get; set; }
    public object[] FilterParams { get; set; }

    public ICollection<Guid> Ids { get; set; }
}

public async Task<List<dynamic>> getcustomTableElemById(DatabaseQueryObject request)
{
    var query = dbContext.Query(request.DbName);
    var requestedQuery = query.Where("e => request.Ids.Contains(e.Id)");
    var filteredQuery = request.Filter != null ? requestedQuery.Where(request.Filter,request.FilterParams) : requestedQuery;
    var executedQuery = await filteredQuery.ToDynamicListAsync();

    return resultObjectCreator.Create(result: request.Ids.Count > 0 ? executedQuery : executedQuery.FirstOrDefault() as object);
}

此处dbContext-相同的DbContext派生的EF Core上下文。

public static class DbContextExtensions
{
    public static IQueryable Query(this DbContext context,string entityName)//,[Optional]T dataType)
    {
        var entityType = context.Model.GetEntityTypes().FirstOrDefault(f => f.ShortName() == entityName);
        var result = (IQueryable)context.Query(entityType.ClrType);//context.Model.FindEntityType(entityName).ClrType);

        return result;
    }

    static readonly MethodInfo SetMethod = typeof(DbContext).GetMethod(nameof(DbContext.Set));

    public static IQueryable Query(this DbContext context,[Optional] Type entityType)
    {
        return SetMethod.MakeGenericMethod(entityType).Invoke(context,null) as IQueryable;
    }
}

但是此代码返回IQueryable,而无法返回需要与IQueryable<T>一起使用的Include()(如果我想包括子表)。 另外,我在代码部分var requestedQuery = query.Where("e => request.Ids.Contains(e.Id)");上遇到运行时错误,因为request.Ids不是DbSet<Sameclass>中定义的dbContext的一部分。

所以,我有一些问题。

  1. 如何说EF Core request.Ids是外部集合?
  2. 如何实现IQueryable<T>而非IQueryable
  3. 如何通过Include()实现IQueryable方法?
  4. 如何在此代码中放弃使用dynamic并使用具体类型?
  5. System.Linq.Dynamics的表现如何?更糟吗?
nnn289 回答:创建请求的概括

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3132107.html

大家都在问