我有一个界面。 我有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内容作为单一来源,并提供所需的结果。 感谢。
答案 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();