使用IQueryable对象的GetDBSet-性能问题? -Asp.Net核心

时间:2020-06-17 12:19:23

标签: asp.net-core asp.net-web-api

我需要查询几个数据库表名称,以获取其中每个数据库的行数。由于我不知道表的数量和请求的表名,因此我为每个循环编写了通过获取DBSet和实现IQueryable对象来查询每个表的方法。

public static IQueryable<object> Set (this DbContext _context, Type t)
        {
            return (IQueryable<object>)_context.GetType().GetMethod("Set").MakeGenericMethod(t).Invoke(_context, null);
        }
var obj = Set(_dbContext, MyCustomType);

int Count = obj.Select(pItem=>pItem).ToList().Where(pItem=>pItem.ID = ID).Count()

由于“ obj”是IQueryable对象, obj.Select(pItem => pItem).ToList()会因为我们正在向内存对象获取大数据而引起性能问题吗?处理这种情况的有效方法是什么?

如果我必须查询单个表,我们是否会以相同的方式进行操作,例如:

int Count = _dbcontext.Set<TableName>.ToList().Where(pItem=>pItem.ID= ID).Count()

Or

int Count = _dbcontext.TableName.ToList().Where(pItem=>pItem.ID= ID).Count()

1 个答案:

答案 0 :(得分:0)

您应该cast IQueryable<object> type to specific List<MyCustomType> type,然后可以使用select和where函数返回所需的内容。

 var obj = _dbContext.Set(typeof(MyCustomType));
 int count = obj.Select(pItem => pItem).ToList().Cast<MyCustomType>().Where(pItem => pItem.ID == ID).Count();