2016-03-31 11 views
4

私は表示順序を設定するために使用されるOrderのようないくつかの同一のプロパティを持つ複数のEntity Frameworkクラスを持っています。MVC汎用リポジトリフィルタリング

例EF部分クラス:

[Table("Feature")] 
public partial class Feature 
{ 
    public long ID { get; set; } 

    public long AppID { get; set; } 

    [Required] 
    [StringLength(15)] 
    public string DisplayMode { get; set; } 

    [Required] 
    public int Order { get; set; } 
} 

他のエンティティクラスもAppIDのプロパティが含まれています。

私のリポジトリクラスで、AppIDでフィルタリングされたOrderの最高値を取得するための汎用メソッドを持つことは可能ですか?

public class Repository<TEntity> : IRepository<TEntity> where TEntity : class 
{ 
    public int NewOrderNumber(long appID) 
    { 
     int result = 0; 

     var count = Context.Set<TEntity>().Count(); 

     if (count != 0) 
     { 
      result = (from List in Context.Set<TEntity>() 
         where List.AppID == appID 
         orderby List.Order 
         select List.Order).ToList().LastOrDefault(); 

      result++; 
     } 

     return result; 
    } 
} 

コードされているように、TEntityにはAppIDプロパティの概念がありません。

答えて

5

あなたのクラスは、インターフェイス

public partial class Feature : IAppOrdered 
{ 
} 

を実装し、その後、あなたは今AppIdにアクセスすることができますリポジトリクラスに

public class Repository<TEntity> : IRepository<TEntity> where TEntity : class, IAppOrdered 
{ 
} 

を汎用的な制約を追加してみましょうインタフェース

public interface IAppOrdered 
{ 
    long AppID { get; } 
    public int Order { get; } 
} 

を追加し、あなたからのプロパティOrderあなたからのリポジトリ。