モデル名がUser
であり、カップルのプロパティがName
とAge
の場合を考えてみましょう。私はUser
を受け入れ、ラムダ関数がOrderBy
メソッドで使用できるようにこれらのプロパティの1つを返すラムダ関数の型を知りたいと思います。パラメータとしてOrderByラムダ関数を渡す
using System;
using System.Linq;
public class User {
public string Name { get; set; }
public int Age { get; set; }
}
public class MainClass {
static void Main() {
var users = new User[] {
new User { Name = "David", Age = 16 },
new User { Name = "Charlie", Age = 29 },
new User { Name = "Alice", Age = 15 },
new User { Name = "Deanna", Age = 27 },
}.AsQueryable();
Write(GetAdultsBy(users, u => u.Name));
Write(GetAdultsBy(users, u => u.Age));
}
private static IQueryable<User> GetAdultsBy(IQueryable<User> users, Func<User, object> order) {
return users
.Where(u => u.Age > 18)
.OrderBy(order); // FAIL in ORDER BY
}
private static void Write(IQueryable<User> query) {
var names = query.Select(u => u.Name);
Console.WriteLine(string.Join(", ", names));
}
}
this codeを実行しているとき、私は次のエラーを取得する:
/tmp/997240133/main.cs(26,14):エラーCS0266:暗黙的にタイプ
System.Linq.IOrderedEnumerable<User>' to
System.Linq.IQueryable」を変換できませんが。明示的な変換が存在します(キャストがありませんか?)
明示的に並べ替えは、おそらくWrite(users.OrderBy(u => u.Age));
でうまく動作します。
Func<User, object> order
パラメータのタイプは何ですか?
あなたはそれが 'のFunc'ではないと知っているので、あなたは、それが受け入れ何のパラメータを確認するために、 'Queryable.OrderBy'(ドキュメントのか、単にインテリセンスを使用してのいずれか)の署名を見ることができます。 –
Servy