从非泛型DbSet中选择列?

时间:2012-01-22 21:20:22

标签: entity-framework-4.1 ienumerable dbcontext

我想实现一个接受DbSet(非通用),stringobject的函数,并返回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获取表名,然后获取数据库中的列名。

1 个答案:

答案 0 :(得分:1)

非通用DbSet是不可能的,但使用以下方法可以轻松解决此问题:

public static IEnumerable<T> Any(DbSet<T> set, string property, objectParameter)
  where T : class
{ ... }

返回DbSet没有意义,因为一旦您查询数据,它就不再是DbSet

更大的问题是从通用DbSet / ObjectSet获取表名,因为这些类不提供此信息。由于来自MetadataWorkspace的{​​{3}}项目,几乎不可能完全了解它。