データベースの orm として FluentData を使用しており、一般的なクエリ メソッドを作成しようとしています。
internal static T QueryObject<T>(string sql, object[] param, Func<dynamic, T> mapper)
{
return MyDb.Sql(sql, param).QueryNoAutoMap<T>(mapper).FirstOrDefault();
}
私のクラスの関数を除いて:
public class MyDbObject
{
public int Id { get; set; }
}
public static MyDbObject mapper(dynamic row)
{
return new MyDbObject {
Id = row.Id
};
}
public static MyDbObject GetDbObjectFromTable(int id)
{
string sql = @"SELECT Id FROM MyTable WHERE Id=@Id";
dynamic param = new {Id = id};
return Query<MyDbObject>(sql, param, mapper);
}
コンパイラでQuery<MyDbObject>(sql, param, mapper)
次のように述べています。
An anonymous function or method group connot be used as a constituent value of a dynamically bound object.
誰でもこれが何を意味するのか分かりますか?
編集:
メソッドをデリゲートに変換しても、コンパイラは文句を言いません。
public static Func<dynamic, MyDbObject> TableToMyDbObject =
(row) => new MyDbObject
{
Id = row.Id
}
なぜ一方の方法が有効で、もう一方の方法が有効でないのかという疑問が残ります。