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

时间:2010-10-28 12:33:39

标签: linq-to-sql generics lambda

我使用的是.NET 3.5。我有asp.net mvc应用程序。有基础控制器:

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.IsHidden,它不会编译 - 但在运行时这是具有某些属性的有效类型。如何编译?

1 个答案:

答案 0 :(得分:2)

好吧,您可以使用界面来描述公共属性,并向TModel添加约束:

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

...

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