执行非泛型DbContext.Set?

时间:2013-07-04 23:35:15

标签: entity-framework ef-code-first code-first dbcontext dbset

我需要执行动态集类型,这是我正在尝试做的事情(伪):

var type = GetSetType(); //System.Type
var set = context.Set(type);
var results = set.ToArray();

我知道这不能确定,Enumerable例如。方法仅适用于通用IEnumerable,但我尝试了set.AsQueryable().Cast<object>().ToArray(),并抛出了NotSupportedException“LINQ to Entities仅支持转换EDM原语或枚举类型。”

执行非通用DbSet的任何方式?

1 个答案:

答案 0 :(得分:4)

我应该删除我的问题,因为答案太简单了,但是为了记录,让我们继续吧。

namespace System.Linq
{
  public static class EntityFrameworkExtensions
  {
    public static IEnumerable<object> AsEnumerable(this DbSet set)
    {
      foreach (var entity in set)
        yield return entity;
    }
  }
}

用法:

var collection = context.Set(entityType).AsEnumerable();

请注意,对重新调整的集合执行的任何过滤都不会在SQL服务器上执行,但在集合枚举器上,将返回整个表。仅在加载所有行时使用。