我有两个应用程序。一个使用XAF
(devexpress框架),第二个使用asp.net mvc。
我的bussines类是在XAF
app中创建的。都使用相同的数据库。
我在XAF的课程:
public class BaseClass:XPObject
{
// some fields
}
// This attribute mean that all fields will be stored in BaseClass table
[MapInheritance(InheritanceType.ParentTable]
public class Class1:BaseClass
{
// some fields
}
// This attribute mean that all fields will be stored in BaseClass table
[MapInheritance(InheritanceType.ParentTable]
public class Class2:BaseClass
{
// some fields
}
在数据库中,我们有一个表格BaseClass
,其中的字段来自BaseClass
,Class1
。
有这样的时刻:XAF添加了自己的字段ObjectType
(它是FK到XPObjectType
表,XAF自动创建)。
结果我们在DB中:
BaseClass:
ID some_fields_from_BaseClass some_fields_from_Class1 ObjectType
1 some_values some_values 1
XPObjectType:
ID TypeName AssemblyName
1 TestApp.Module.BO.Class1 TestApp.Module
现在,我在ASP.NET MVC应用程序中写道:
Database.BaseClasses.Where( ...some predicate...).ToList();
此查询返回BaseClass
的集合。但是,我希望该查询返回我的派生类型(例如Class1
或Class2
或Class 3
)。
我怎么能这样做?
PS。我不能使用IsDiscriminator
属性,因为它是FK,我不想在asp.net mvc应用程序中删除对象(Class1
,class2
。)
答案 0 :(得分:2)
试试这个:
public List<T> GetData<T>(Func<T,bool> fn) where T :BaseClass
{
if (typeof(T) == typeof(BaseClass))
{
List<T> res = null; // Fillout from database
var r = res.Where(fn).Select(o => (BaseClass)o).ToList();
}
else
{
throw new Exception("Invalid type, this service support only BaseClasses");
}
return null;
}