Я использую шаблон репозитория и пытаюсь создать общий метод, так как у меня есть несколько объектов, которые извлекаются из своих репозиториев таким же образом:
Мои репозитории создаются следующим образом:
public interface IEntityRepository<T> : IDisposable
public interface IAuditorRepository : IEntityRepository<Auditor>
public class AuditorRepository : IAuditorRepository
Класс Auditor, если он определен как:
public class BaseEntity : IObjectWithState
public partial class Auditor : BaseEntity
Помимо AuditorRepository, у меня есть несколько других, таких как BuildingRepository. Теперь я пытаюсь создать общий метод, в котором я мог бы передать репозиторий:
public List<EditSelectItemViewModel> GetItems<T>(IEntityRepository<T> repos) where T : BaseEntity
{
var d = repos.All.Where(x => x.isActive).OrderBy(x => x.Name).Include(z => z.Contracts)
.Select(y => new EditSelectItemViewModel
{
Id = y.Id,
SourceName = y.Name,
DisplayOnNew = y.DisplayOnNew,
NumberOfTimesUsed = y.ActiveContracts.Count(a => a.isActive)
}).ToList();
return d;
}
Но я продолжаю получать сообщение об ошибке в .Where о том, что это неоднозначная ссылка. Все репозитории реализуют метод All, например, ниже представлена версия AuditorRepository:
public IQueryable<DomainClasses.Auditor> All { get { return _context.Auditors; } }
IEntityRepostiory определяется как:
public interface IEntityRepository<T> : IDisposable
{
IQueryable<T> All { get; }
//List<T> AllRequests { get; }
IQueryable<T> AllIncluding(params Expression<Func<T, object>>[] includeProperties);
T Find(params object[] keyValues);
void InsertOrUpdateGraph(T entityGraph);
void InsertOrUpdate(T entity);
void Delete(params object[] keyValues);
}
и baseEntity:
public class BaseEntity : IObjectWithState
{
public State State { get; set; }
}
Состояние определяется как:
public interface IObjectWithState
{
State State { get; set; }
}
public enum State
{
Added,
Unchanged,
Modified,
Deleted
}
All
и в интерфейсеIEntityRepository<>
? - person Jeppe Stig Nielsen   schedule 14.07.2014BaseEntity
? - person Jämes   schedule 14.07.2014.isActive
в первой лямбдеx => x.isActive
? - person Jeppe Stig Nielsen   schedule 15.07.2014