1

コレクションの注文に使用するデリゲートを作成したいと思います。

 switch(vm.OrderBy){
            case "Title":
                vm.Albums = _albumRepo.Get(a => a.Title);
                break;
            case "Artist":
                vm.Albums = _albumRepo.Get(a => a.Artist.Name);
                break;
            case "Price":
                vm.Albums = _albumRepo.Get(a => a.Price);
                break;

私のリポジトリの方法は次のとおりです。

public IEnumerable<Album> Get(Func<Album, string> orderingDelegate = null)
    {
        IEnumerable<Album> albums;

        if (orderingDelegate == null)
            albums = _context.Albums.OrderBy(a => a.Title);
        else
            albums = _context.Albums.OrderBy(orderingDelegate);

        return albums;
    }

そのため、Get() メソッドにa を渡しますFunc<Album, string>。これは、順序付けプロパティが String 型である限り問題ありません。ただし、価格は小数であるため、これはコンパイルされません。

_albumRepo.Get(a => a.Price);

小数で注文できるようにするためだけに、別の Get メソッドを作成する必要がありますか?

public IEnumerable<Album> Get(Func<Album, decimal> orderingDelegate = null){ }

または、これを行うより良い方法はありますか?

ありがとう!

クリス

4

2 に答える 2

3

署名を汎用に変更できますか?

public IEnumerable<Album> Get<T>(Func<Album, T> orderingDelegate = null)
{
    IEnumerable<Album> albums;

    if (orderingDelegate == null)
        albums = _context.Albums.OrderBy(a => a.Title);
    else
        albums = _context.Albums.OrderBy(orderingDelegate);

    return albums;
}
于 2013-07-24T12:23:50.457 に答える
1

簡単な解決策を実行できます:

public IEnumerable<Album> Get(Func<Album, object> orderingDelegate)
{
    return _context.Albums.OrderBy(orderingDelegate);
}
于 2013-07-24T12:15:42.147 に答える