0

我正在尝试实现一个通用选择,我在我的存储库实现中使用了以下结构

 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 对象的类别的行为与CategoryIDCategoryName不同,它的显示无法解析符号

那么我是在做正确的事情还是错过了什么?

4

2 回答 2

1

很好地找到了解决方案...签名应该是

List<TResult> Populate<TResult>(Expression<Func<TEntity, TResult>> predicate);

Repository 类中的实现

public List<TResult> Populate<TResult>(Expression<Func<TEntity, TResult>> source)
{
        return _objectSet.Select(source).ToList();
}

现在从业务逻辑中使用它,例如-

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);

}

问题是因为返回类型是匿名的,所以在传递值时会产生问题,现在返回类型是列表类型的结果,所以没有转换错误..

于 2012-07-15T05:32:55.303 回答
-1

您需要定义要在泛型方法中使用的泛型参数:

public IEnumerable<TEntity> Populate<TEntity>(Expression<Func<TEntity, bool>> predicate)

然后,按如下方式使用它:

return _repository.Populate<DTO.Catrgory>(predicate: category => new { category.CategoryID, category.CategoryName }).ToList();
于 2012-07-13T04:09:43.730 回答