【发布时间】:2017-05-19 10:32:43
【问题描述】:
我正在学习 Dapper,但我无法使用它创建匿名类型的实例。首先,一些上下文:我们有一个返回IEnumerable<T> 的方法。请注意,T 可以是匿名的。
IEnumerable<T> ExecuteCollection<T>(...)
{
// Query building logic goes here.
var statement = Something.Statement;
var parameters = Something.Parameters;
return _connection.Query<T>(statement, parameters);
}
此代码适用于已注册的类,例如魅力。但是,我希望它也能处理匿名类型,编译器抛出的问题是:
InvalidOperationException: "A parameterless default constructor or one matching signature ([signature of anonymous object]) is required for <>f__AnonymousType5`2[[System.Int16, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=XXX],[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=XXX]] materialization"
我知道问题在于匿名对象没有可使用的构造函数。一个替代方案是(T)Activator.CreateInstance(typeof(T), row),但row 变量必须是object[],而不是DapperRow。
每当我搜索有关此主题的信息时,每个人都说我不应该一开始就使用匿名类型。但是,要求我的函数返回匿名类型项的集合。
这是我第一次使用 Dapper,不知道是不是我理解错了。问题是:如何使用 Dapper 创建匿名对象的实例,或者围绕这个问题有什么替代方法,以便我的方法仍然可以返回 IEnumerable<T>?我正在使用 .NET Core。
【问题讨论】: