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のオブジェクトとして動作する必要があるカテゴリは、CategoryIDおよびCategoryNameのように動作しておらず、その表示はシンボルを解決できません

だから私は物事を正しくやっていますか、それとも何かを逃していますか?

4

2 に答える 2

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 LogicForEg-から使用します。

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であるため、キャストエラーは発生しません。

于 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 に答える