将Iqueryable与Generic Repository一起使用时找不到Records

时间:2014-04-24 16:28:06

标签: c# repository repository-pattern structuremap

我有一个已知的工作存储库。使用structuremap作为IOC。

但我不能使用以下内容进行任何Iqueryable搜索:

 private IRepository<Employee> _employeeRepository;
 public Employee GetEmployeeByUserName(Employee employee)
    {
        return _employeeRepository.Find()
                .Where(i => i.User_Name == employee.User_Name) 
                        as Employee;
    }

EmployeeRepository:

 public IQueryable<T> Find()
    {
        var table = this.LookupTableFor(typeof(T));
        return table.Cast<T>();
    }

IRepository:

public interface IRepository<T> where T: class
{
    void Commit();
    void Delete(T item);
    IQueryable<T> Find();
    IList<T> FindAll();
    void Add(T item);      

}

是什么给了???

1 个答案:

答案 0 :(得分:2)

Find方法不期望泛型类型,而where子句返回一个IEnumerable,您尝试将其作为Employee进行转换。用FirstOrDefault替换where子句。例如

_employeeRepository.Find()
                .FirstOrDefault(i => i.User_Name == employee.User_Name)