多态性和LinqToSql
本文关键字:LinqToSql 多态性 | 更新日期: 2023-09-27 18:25:51
我有两个应用程序。一个使用XAF
(devexpress框架),另一个使用asp.net mvc。我的总线类是在XAF
应用程序中创建的。两者使用相同的数据库。我在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
}
在DB中,我们有一个表:BaseClass
,其中包含来自BaseClass
、Class1
的字段。
有这样的时刻:XAF添加了自己的字段ObjectType
(它是XAF自动创建的XPObjectType
表的FK)。结果我们有一个数据库:
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
)。
试试这个:
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;
}