我有一个表单,可以将DbContext
的实例和表的实体传递给它,如下所示:
public frm_foo(DbContext DatabaseContext, DbSet TableEntity)
{
InitializeComponent();
var res =GetRowCount(DatabaseContext,TableEntity);
}
并致电表格承包商:
new frm_foo(dbContext, dbContext.Set<IpRoom>()).ShowDialog();
Context包含一个IpRoom
表。
我希望在一个函数中获取行数,该函数将DbContext
和Dbset
实例发送给它,如下所示:
public int GetRowCount(DbContext DatabaseContext, DbSet TableEntity)
{
var countVal = (from a in DatabaseContext.Set(TableEntity.GetType())
select a).Count();
return countVal;
}
但得到了错误:
无法找到源类型的查询模式的实现 'DbSet'。 “选择”未找到。
DatabaseContext.Set(TableEntity.GetType())
返回Dbset!谁知道我错了什么?提前致谢
Ps :我不想使用SqlQuery
,例如:
var sql = "SELECT COUNT(*) FROM dbo.IpRoom";
var total = context.Database.SqlQuery<int>(sql).Single();
答案 0 :(得分:1)
DbSet
未实现IQueryable,DbSet<T>
。例如
public static int GetRowCount<T>(DbContext DatabaseContext, DbSet<T> TableEntity)
{
var countVal = TableEntity.Count();
return countVal;
}
答案 1 :(得分:0)
为了获得通用行数,我使用以下方法。
proxyPort=8080
答案 2 :(得分:-1)
我找到了!只需在项目中添加一个类:
namespace System.Data.Entity
{
public static class EntityFrameworkExtensions
{
public static IEnumerable<object> AsEnumerable(this DbSet set)
{
foreach (var entity in set)
yield return entity;
}
}
}
此类向AsEnumerable
实例添加通用方法DbSet
,当您想要将其用于 Count 时:
var count = (from a in TableEntity.AsEnumerable() select a).Count();