我需要查询几个数据库表名称,以获取其中每个数据库的行数。由于我不知道表的数量和请求的表名,因此我为每个循环编写了通过获取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()
答案 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();