2012-02-27 2 views
0

두 가지 응용 프로그램이 있습니다. 하나는 XAF (devexpress 프레임 워크)을 사용하고, 두 번째는 asp.net mvc를 사용합니다. 내 bussines 클래스는 XAF app에 생성됩니다. 둘 다 동일한 데이터베이스를 사용합니다. XAF에서 내 수업하십시오 DB에서다형성과 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 
    } 

우리는 하나 개의 테이블이 있습니다 BaseClass 필드 BaseClass에서, Class1.

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의 나에게 모음을 반환합니다. 그러나, 나는 그 쿼리가 파생 된 타입 (Class1 또는 Class2 또는)을 돌려 주길 바란다.
어떻게하면됩니까?

추신. IsDiscriminator 속성을 사용할 수 없습니다. FK이고 객체 복제를 원하지 않기 때문입니다 (Class1, class2 asp.net mvc app).

답변

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

흠을이 코드는 항상없는 baseclass를 반환합니다,하지만 난 내 쿼리 반환 유형 – user348173

+1

아니, 당신이 좋아하는이 함수를 호출한다 파생 것을 원하는 : = GetData의 'VAR 데이터 (FN); –