Linq to sql 如何访问linq表达式中泛型类型的属性

Linq to sql 如何访问linq表达式中泛型类型的属性,linq-to-sql,generics,lambda,Linq To Sql,Generics,Lambda,我正在使用.NET3.5。我有asp.NETMVC应用程序。有一个基本控制器: public abstract class BackendController<TModel> : BaseController where TModel : class { // skipped ... public ActionResult BatchDelete(int[] ids) { var entities = repository.GetList().Where(item =

我正在使用.NET3.5。我有asp.NETMVC应用程序。有一个基本控制器:

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

 }

}
public抽象类BackendController:BaseController其中TModel:class
{
//跳过。。。
public ActionResult BatchDelete(int[]ID)
{
var entities=repository.GetList()。其中(item=>ids.Contains(item.ID));
repository.delete(实体)
}
public ActionResult BatchHide(int[]ID)
{
var entities=repository.GetList()。其中(item=>ids.Contains(item.ID));
repository.BatchUpdate(
其中(item=>item.ishiden==false),
c=>新的TModel{IsHidden=true}
);
}
}

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

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

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

...

public abstract class BackendController<TModel> : BaseController
    where TModel : IModel, new()
公共接口IModel
{
int ID{get;}
bool ishiden{get;set;}
}
...
公共抽象类BackendController:BaseController
其中TModel:IModel,new()