我正在尝试实现一个泛型选择,我在我的Repository实现中使用了以下结构
public IEnumerable<TEntity> Populate(Expression<Func<TEntity,bool>> predicate)
{
return (IEnumerable<TEntity>) _objectSet.Select(predicate).AsEnumerable();
}
这是我用
的业务逻辑调用的public IEnumerable<DTO.Category> Populatelist()
{
return _repository.Populate(predicate: category => new { category.CategoryID, category.CategoryName }).ToList();
}
但是应该作为BTO.Category对象的类别的行为与 CategoryID 和 CategoryName 的行为不同,它显示无法解析符号< /强>
我正在做正确的事还是错过了什么?
答案 0 :(得分:1)
很好找到解决方案......签名应该是
List<TResult> Populate<TResult>(Expression<Func<TEntity, TResult>> predicate);
存储库类中的实现
public List<TResult> Populate<TResult>(Expression<Func<TEntity, TResult>> source)
{
return _objectSet.Select(source).ToList();
}
现在使用Business Logic For Eg -
public IDictionary<int,string> Populatelist( )
{
var expectedResult =_repository.Populate(category => new {category.CategoryID, category.CategoryName}).ToList();
return expectedResult.ToDictionary(c => c.CategoryID, c => c.CategoryName);
}
问题是因为返回类型是匿名的,因此在传递值时会产生问题,现在返回类型是列表类型的Tresult,因此没有转换错误..
答案 1 :(得分:-1)
您需要定义要在泛型方法中使用的泛型参数:
public IEnumerable<TEntity> Populate<TEntity>(Expression<Func<TEntity, bool>> predicate)
然后,使用它如下:
return _repository.Populate<DTO.Catrgory>(predicate: category => new { category.CategoryID, category.CategoryName }).ToList();