私は、この優れたブログ記事からのアドバイス以下、それらをテスト可能にするために私のEFリポジトリクラスをリファクタリングの過程にいるよ:LINQのクエリ<IEnumerableを<User>>のIQueryableない<User>
http://blog.iannelson.systems/testing-linq-queries/
すべて私はブログ記事のようにIQueryable拡張メソッドを連鎖させて、より良心的で読みやすいようにすることもできます。
私は関連するList<>
に関連する障害に遭遇しました。
ドメインエンティティはユーザーであり、ユーザーはタイプList<User>
のフレンドのコレクションを持ちます。標準的なソーシャルネットワーキングのパラダイムです。
ユーザの友人のサブセットを検索したいとします。たとえば、ユーザ名が「a」で始まるすべての友人を検索したいとします。だから私はこれを行う:
public static IQueryable<IEnumerable<User>> SelectFriendsUsernameStartsWith(this IQueryable<User> userQueryable, string searchQuery)
{
return userQueryable.Select(x => x.Friends.Where(y => y.Username.StartsWith(searchQuery)));
}
これは私のチェーンを壊すことです。戻り値の型はIQueryable<User>
のIQueryable<IEnumerable<User>>
でなくなり、私がIQueryable<User>
のために書いた拡張メソッドを最後に連鎖させることはできません。
IEnumerable<User> users = new HashSet<User>()
{
new User() {Username = "Aaron"},
new User() {Username = "alex"},
new User() {Username = "Ally"},
new User() {Username = "anthony"},
new User() {Username = "bob"},
new User() {Username = "Bill"}
};
IQueryable<User> userQueryable = users.AsQueryable();
すなわちIEnumerable<User>
リターンのようIQueryable<User>
ない(上AsQueryable()
を呼び出す:私のユニットテストでは、私はこのようなコードを持っているので
ここでは型の違いは、私にはどんな意味がありません。上記の例)IQueryable<IEnumerable<User>>
誰もがこれにどのような光を当てることができますか?
実際には2つのタイプの違いは何ですか?上記の例を返信するにはどうすればよいですかIQueryable<User>
ではなくIQueryable<IEnumerable<User>>
?
ありがとうございます!
優れた答えです。 – reach4thelasers