【发布时间】:2017-12-10 14:09:01
【问题描述】:
我有一个表单,它将我的DbContext 的实例和表的实体传递给它,如下所示:
public frm_foo(DbContext DatabaseContext, DbSet TableEntity)
{
InitializeComponent();
var res =GetRowCount(DatabaseContext,TableEntity);
}
并通过以下方式致电表单承包商:
new frm_foo(dbContext, dbContext.Set<IpRoom>()).ShowDialog();
上下文包含一个IpRoom 表。
我想从将DbContext 和Dbset 实例发送给它的函数中获取行数,如下所示:
public int GetRowCount(DbContext DatabaseContext, DbSet TableEntity)
{
var countVal = (from a in DatabaseContext.Set(TableEntity.GetType())
select a).Count();
return countVal;
}
但出现错误:
找不到源类型的查询模式的实现 '数据库集'。未找到“选择”。
而DatabaseContext.Set(TableEntity.GetType()) 返回一个数据库集!有人知道我怎么了?提前致谢
Ps:我不想使用SqlQuery,类似:
var sql = "SELECT COUNT(*) FROM dbo.IpRoom";
var total = context.Database.SqlQuery<int>(sql).Single();
【问题讨论】:
-
看看这个方法的预期用途会很有趣,即
GetRowCount(context, ???) -
@IvanStoev:
???Ivan 是什么?你的意思是传递一个参数给函数? -
否 :) 问题是如何获得
DbSet以便将其传递给方法。只是想知道为什么你需要那个方法,因为例如context.Logs.Count()很容易做到这一点。 -
嗯,我不确定。现在我看到了您的更新,并且以某种方式可以解决
Count问题,但请注意非通用DbSet几乎无法使用。您不能针对它编写普通的 LINQ,ToList等也不能。如果您绝对确定问题只是Count(),我想我们可以提供帮助。
标签: c# entity-framework dbcontext dbset