2010-10-28 4 views
2

Iam utilisant .NET 3.5. J'ai asp.net application mvc. Il est contrôleur de base:Comment accéder à la propriété de type générique dans l'expression linq

public abstract class BackendController<TModel> : BaseController where TModel : class 
{ 
// skipped ... 

public ActionResult BatchDelete(int[] ids) 
{ 
    var entities = repository.GetList().Where(item => ids.Contains(item.ID)); 
    repository.delete(entities) 

} 

public ActionResult BatchHide(int[] ids) 
{ 
    var entities = repository.GetList().Where(item => ids.Contains(item.ID)); 
    repository.BatchUpdate(
         entities.Where(item => item.IsHidden == false), 
         c => new TModel { IsHidden = true } 
        ); 

} 

} 

Il est ne compilera pas, en raison de item.ID et item.IsHidden - mais dans ce temps d'exécution est de type valide avec certaines propriétés. Comment faire cette compilation?

Répondre

2

Eh bien, vous pouvez utiliser une interface pour décrire les propriétés communes et ajouter une contrainte à TModel:

public interface IModel 
{ 
    int ID { get; } 
    bool IsHidden { get; set; } 
} 

... 

public abstract class BackendController<TModel> : BaseController 
    where TModel : IModel, new() 
Questions connexes