代码之家  ›  专栏  ›  技术社区  ›  Eldar

如何在linq表达式中访问泛型类型的属性

  •  2
  • Eldar  · 技术社区  · 14 年前

    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 }
                        );
    
     }
    
    }
    

    它不会编译,因为item.ID和item.ishiden-但在运行时,这是具有某些属性的有效类型。如何编译?

    1 回复  |  直到 14 年前
        1
  •  2
  •   Jon Skeet    14 年前

    好吧,您可以使用一个接口来描述公共属性,并将一个约束添加到 TModel :

    public interface IModel
    {
        int ID { get; }
        bool IsHidden { get; set; }
    }
    
    ...
    
    public abstract class BackendController<TModel> : BaseController
        where TModel : IModel, new()