C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

リポジトリパターンで複数ソート

[トピック内 4 記事 (1 - 4 表示)]  << 0 >>

■88808 / inTopicNo.1)  リポジトリパターンで複数ソート
  
□投稿者/ 青い子ブタ (1回)-(2018/09/28(Fri) 16:44:37)

分類:[.NET 全般] 

ASP.NET MVC5 C# Framework4.6.2 VisualStudio2017
DB:Oracle12 データベースファースト


リポジトリパターンを使用ています。
(見よう見まねのため、正確に理解できていません。)

やりたいこと:
データに対して複数ソートを実行したい。
リポジトリがIQueryable<T>を返すのは良くない(?)のでリポジトリ内で実装しようとしてる。

調べた結果:
以下のようなコードでリポジトリで定義すれば、実現できそう。
public IEnumerable<T> OrderBy(Expression<Func<T, object>> orderLambda)
{
    return DbSet.OrderBy(orderLambda);
}

※実際には複数条件でソートなので、引数はIEnumerableになる。
IEnumerable<Expression<T, object>> orderLambda


困っていること:
実行すると例外が発生した。(ソートしたい値の型はint32)

例外の内容:
型 'System.Int32' を型 'System.Object' にキャストできません。
LINQ to Entities では EDM プリミティブ型または列挙型のキャストのみがサポートされます。

試したこと:
引数をExpression<Func<T, object>>からExpression<Func<T, int>>に変更すればエラーが出ず実行できる。

教えて欲しいこと:
複数ソートなので引数はIEnumerable<Expression<T, object>>にしようと思いましたが
一つ目のソート条件がint
二つ目のソート条件がstring だったとき、どう指定すればよいのかわかりません。


わかる方がおられましたら、教えていただけないでしょうか。
よろしくお願いいたします。

引用返信 編集キー/
■88809 / inTopicNo.2)  Re[1]: リポジトリパターンで複数ソート
□投稿者/ 魔界の仮面弁士 (1867回)-(2018/09/28(Fri) 16:55:33)
No88808 (青い子ブタ さん) に返信
> データに対して複数ソートを実行したい。
> リポジトリがIQueryable<T>を返すのは良くない(?)のでリポジトリ内で実装しようとしてる。

複数ソート…というのが、どういうものを意図しているのかにもよりますが、
 .OrderBy(λ1).ThenBy(λ2)
とは違うのでしょうか。

IQueryable<> → IOrderedQueryable<>
IEnumerable<> → OrderedEnumerableRowCollection<>
になるというイメージ。

Entity Framework はあまり使っていないので、外していたらすみません。
引用返信 編集キー/
■88810 / inTopicNo.3)  Re[2]: リポジトリパターンで複数ソート
□投稿者/ 青い子ブタ (2回)-(2018/09/28(Fri) 17:11:42)
やりたいことは下記のブログと全く同じです。
「OrderByのセレクタを外出ししたい」
http://10.hateblo.jp/entry/2014/05/30/154157

object型ではなく、dynamic型で実現できるとあるのですが、
Expression<Func<T, dynamic>>;

私の環境ではやはり例外がスローされます。
型 'System.Int32' を型 'System.Object' にキャストできません。
LINQ to Entities では EDM プリミティブ型または列挙型のキャストのみがサポートされます。


引き続きよろしくお願いいたします。
引用返信 編集キー/
■88811 / inTopicNo.4)  Re[3]: リポジトリパターンで複数ソート
□投稿者/ ぽや〜ん (4回)-(2018/09/28(Fri) 20:49:10)
「OrderByのセレクタを外出ししたい」
http://10.hateblo.jp/entry/2014/05/30/154157

の方法で実現できました。
ありがとうございました。
解決済み
引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ