2012-07-13 59 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