1

は、私は次のようなモデルがあります:EF4 CTP5多型クエリ

public class Employee 
{ 
    public Employee() 
    { 
     TimeCards = new List<TimeCard>(); 
    } 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public DateTime HireDate { get; set; } 
    public virtual ICollection<TimeCard> TimeCards { get; set; } 
} 
public class Manager : Employee 
{ 
    public bool HasCompanyCar { get; set; } 
} 
public class Developer : Employee 
{ 
    public string MainProgrammingLanguage { get; set; } 
} 

(それが重要である場合、私はthis infrastructureを使用しています)。

私が必要とするのは、マネージャではないすべての従業員を取得することです。 OfType拡張メソッドのみがあります。私が必要とするのはNotOfTypeです。

var employees = unitOfWork.Employees 
        .FindAll() 
        .NotOfType<Manager>(); //or something similar 
    var cards = unitOfWork.TimeCards.FindAll(); 

    var query = from e in employees 
       from tc in cards 
       where tc.Employee.Id == e.Id && e.Name.StartsWith("C") 
       select tc; 

オフトピック:この種の状況に適した継承ですか?どのようにモデル化していますか?私はちょうど相続が私を間違った道に導くと感じます。

答えて

0

おそらく、NotOfType拡張メソッドが優れているはずですが、これはうまくいくはずです。

var employees = unitOfWork.Employees 
       .Where(e => !(e is Manager)); 

var cards = unitOfWork.TimeCards.FindAll(); 

var query = from e in employees 
      from tc in cards 
      where 
       tc.Employee.Id == e.Id && 
       e.Name.StartsWith("C")     
      select tc; 

またはこのような:

var employees = unitOfWork.Employees 
       .FindAll(); 

var cards = unitOfWork.TimeCards.FindAll(); 

var query = from e in employees 
      from tc in cards 
      where 
       tc.Employee.Id == e.Id && 
       !(e is Manager) && 
       e.Name.StartsWith("C")     
      select tc; 
関連する問題