Как получить доступ к свойству универсального типа в выражении linq - PullRequest
2 голосов
/ 28 октября 2010

Я использую .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 Ответ

2 голосов
/ 28 октября 2010

Ну, вы можете использовать интерфейс для описания общих свойств и добавить ограничение к TModel:

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

...

public abstract class BackendController<TModel> : BaseController
    where TModel : IModel, new()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...