如何链接指向实体框架6上现有DBSet源的数据?

时间:2014-05-07 02:11:23

标签: c# entity-framework

我有一个界面。 我有2个派生自这个界面的类。 我想创建一个列表,其中包含派生相同接口的所有这些对象。

因此,可以制作一个列表并在那里添加单独的DbSet项。但是可能会出现一些记忆问题。

那么有没有办法从现有的DbSet内容中创建一个List,比如链接soruces?或者我如何搜索这个主题?

Interface IObject
{
int Id {get;set;}
string A {get;set;}
string B {get;set;}
string TypeName {get;set;}
}

第1类

Class AObject:IObject
{
int Id {get;set;}
string A {get;set;}
string B {get;set;}
string TypeName {get;set;}
}

第2类

Class BObject:IObject
{
int Id {get;set;}
string A {get;set;}
string B {get;set;}
string TypeName {get;set;}
}

public DbSet<AObject> AObjects{get;set;}
public DbSet<BObject> AObjects{get;set;}

我想创建一个List并从web api返回或查询所有这些DbSet内容作为单一来源,并提供所需的结果。 感谢。

1 个答案:

答案 0 :(得分:1)

怎么样:

List<IObject> response = ctx.AObjects.ToList()
                             .Cast<IObject>()
                             .Concat(ctx.BObjects.ToList()).ToList();

其中ctx是您的DbContext类的实例

目前无法查询EF中的界面。

但你可以这样做:

public static class IObjectExtensions
{
    public static IEnumerable<IObject> PeformQuery<T>(
                              this DbSet<T> set, 
                              Func<IObject,bool> @where) 
        where T : class, IObject
    {
        return set.Where(@where).AsEnumerable();
    }
}

用过:

Func<IObject, bool> q = item => item.Id < 2;
List<IObject> results = ctx.AObjects.PeformQuery(q).Concat(ctx.BObjects.PeformQuery(q)).ToList();