C# 如何链接实体框架6上指向现有数据库集源的数据?

C# 如何链接实体框架6上指向现有数据库集源的数据?,c#,entity-framework,C#,Entity Framework,我有一个接口。 我有两个从这个接口派生的类。 我想制作一个列表,其中包含派生相同接口的所有对象 因此,您可以创建一个列表并在其中添加单独的DbSet项。但是可能会发生一些内存问题 那么,有没有办法从现有的DbSet内容(比如链接soruces)中列出一个列表呢?或者我如何搜索这个主题,哪个术语 Interface IObject { int Id {get;set;} string A {get;set;} string B {get;set;} string TypeName {get;set

我有一个接口。 我有两个从这个接口派生的类。 我想制作一个列表,其中包含派生相同接口的所有对象

因此,您可以创建一个列表并在其中添加单独的DbSet项。但是可能会发生一些内存问题

那么,有没有办法从现有的DbSet内容(比如链接soruces)中列出一个列表呢?或者我如何搜索这个主题,哪个术语

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

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

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;}
类对象:IOObject
{
int Id{get;set;}
字符串A{get;set;}
字符串B{get;set;}
字符串类型名{get;set;}
}
公共DbSet aoobjects{get;set;}
公共DbSet aoobjects{get;set;}
我想制作一个列表,返回或查询所有这些DbSet内容,作为来自webapi的单个源,并提供所需的结果。 谢谢。

那么:

List<IObject> response = ctx.AObjects.ToList()
                             .Cast<IObject>()
                             .Concat(ctx.BObjects.ToList()).ToList();
List response=ctx.aoobjects.ToList()
.Cast()
.Concat(ctx.boobjects.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();
    }
}
公共静态类IObjectExtensions
{
公共静态IEnumerable查询(
这个DbSet集合,
Func@where)
其中T:class,IObject
{
返回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();
Func q=item=>item.Id<2;
List results=ctx.aoobjects.PeformQuery(q).Concat(ctx.boobjects.PeformQuery(q)).ToList();

是的,它就是这样工作的。但是它会造成一些记忆问题吗?例如,当我们尝试查询您描述的“response”时,如果结果计数为0,则由于ToList()的原因,已经有所有数据进入内存。如果没有问题,我会用它。你们知道吗,有没有办法在派生相同接口的类型之间定义动态代理?在空查询中调用ToList不会导致内存问题。。。不幸的是,在EF中还不可能使用接口进行查询。但是,您可以使用泛型方法^,但必须在组合查询之前对其求值。