我想实现一个接受DbSet
(非通用),string
和object
的函数,并返回DbSet
。类似于以下pseudu:
public static DbSet Any(DbSet set, string propertyName, objectParameter)
{
var tableName = set.TableName;
var columnName = set.GetColumnNameForProperty(propertyName);
var query = string.Format("SELECT TOP(1) {0} FROM {1} WHERE {0} = {2}",
columnName,
tableName,
objectParameter);
}
我认为SQL查询已经足够,因为我可以直接在数据库(context.Database.ExecuteSql
)上执行它。
我想要做的是从给定的DbSet
获取表名,然后获取数据库中的列名。
答案 0 :(得分:1)
非通用DbSet
是不可能的,但使用以下方法可以轻松解决此问题:
public static IEnumerable<T> Any(DbSet<T> set, string property, objectParameter)
where T : class
{ ... }
返回DbSet
没有意义,因为一旦您查询数据,它就不再是DbSet
。
更大的问题是从通用DbSet
/ ObjectSet
获取表名,因为这些类不提供此信息。由于来自MetadataWorkspace
的{{3}}项目,几乎不可能完全了解它。