2012-02-27 115 views
0

我有兩個應用程序。其中一個使用XAF(devexpress框架),第二個使用asp.net mvc。 我的商務班是在XAF應用程序中創建的。兩者使用相同的數據庫 我在XAF類:多態性和LinqToSql

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)。 在結果,我們有一個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。但是,我希望該查詢返回派生類型(例如,Class1Class2Class 3)。
我該怎麼做?

PS。我不能使用IsDiscriminator屬性,因爲它的FK,我不想重複對象(在asp.net mvc應用程序中Class1,class2)。

回答

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

嗯,這個代碼將返回基類永遠,但我想我的查詢返回派生類型 – user348173 2012-02-27 12:06:39

+1

不,你應該調用這個函數,如:'VAR數據=的GetData (FN );' – 2012-02-27 12:11:46