Вы можете сделать это, просто заброса сообщение об ошибке говорит
return GetList().Select(m => m.Coordinator).Distinct() as IEnumerable<T>;
Это может быть сделано с помощью общего хранилища, просто используя интерфейс. Если класс, реализующий этот репозиторий, попадает в базу данных или не имеет особого значения.
public interface IRepository<TEntity>
{
IEnumerable<TEntity> Get(
Expression<Func<TEntity, bool>> filter = null,
Func<IQueryable<TEntity>, IOrderedQueryable<TEntity>> orderBy = null,
string includeProperties = "");
TEntity GetById(object id);
void Insert(TEntity entity);
void Delete(object id);
void Delete(TEntity entityToDelete);
void Update(TEntity entityToUpdate);
}
Пример реализация с использованием рамка сущности: (Это реально не имеет значения, если вы используете EF или просто класс макета здесь, вы могли бы просто заменить контекст/объекты с, например, список)
public class Repository<TEntity> : IRepository<TEntity>, IDisposable where TEntity : class
{
internal ApplicationContext Context;
internal DbSet<TEntity> Entities;
public Repository(ApplicationContext context)
{
if (Context == null)
{
throw new ArgumentNullException();
}
Context = context;
Entities = Context.Set<TEntity>();
}
public virtual IEnumerable<TEntity> Get(
Expression<Func<TEntity, bool>> filter = null,
Func<IQueryable<TEntity>, IOrderedQueryable<TEntity>> orderBy = null,
string includeProperties = "")
{
IQueryable<TEntity> query = Entities;
if(filter != null)
{
query = query.Where(filter);
}
query = includeProperties.Split(new[] {','}, StringSplitOptions.RemoveEmptyEntries)
.Aggregate(query, (current, includeProperty) => current.Include(includeProperty));
return orderBy != null ? orderBy(query).ToList() : query.ToList();
}
public virtual TEntity GetById(object id)
{
return Entities.Find(id);
}
public virtual void Insert(TEntity entity)
{
Entities.Add(entity);
}
public virtual void Delete(object id)
{
TEntity entityToDelete = Entities.Find(id);
Delete(entityToDelete);
}
public virtual void Delete(TEntity entityToDelete)
{
if (Context.Entry(entityToDelete).State == EntityState.Detached)
{
Entities.Attach(entityToDelete);
}
Entities.Remove(entityToDelete);
}
public virtual void Update(TEntity entityToUpdate)
{
Entities.Attach(entityToUpdate);
Context.Entry(entityToUpdate).State = EntityState.Modified;
}
мог кто-то проголосовал? – Ken
Я не спустил вниз, но вы сделали общий метод, который может обрабатывать только несколько типов, что обычно является признаком плохого дизайна. –
@ LasseV.Karlsen, это хороший комментарий, не могли бы вы привести пример того, как это можно написать? – Ken