2012-07-13 52 views
0

我想实现一个通用的选择,我已经在我的仓库实现具有以下结构中使用通用LINQ选择执行

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的对象的类别不像类别ID类别名称其显示无法解析符号

所以我正在做的事情或错过什么东西?

回答

1

好找到了解决办法...签名应be

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

存储库类中的实现

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

现在使用这种从业务逻辑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

您需要定义泛型参数泛型方法内使用:

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

,然后,用它如下:

return _repository.Populate<DTO.Catrgory>(predicate: category => new { category.CategoryID, category.CategoryName }).ToList(); 
+0

我不知道它为什么显示“无法转换表达式谓词:category =>新的{category.CategoryID,category.CategoryName}返回类型任何猜? – Ankit 2012-07-13 06:20:22