多态性和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,其中包含来自BaseClassClass1的字段。

有这样的时刻: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的集合。但是,我希望该查询返回派生类型(例如Class1Class2Class 3
我该怎么做?

PS。我不能使用IsDiscriminator属性,因为它是FK,并且我不想重复对象(asp.net mvc应用程序中的Class1class2)。

多态性和LinqToSql

试试这个:

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;
    }