gpt4 book ai didi

c# - 使用 Dapper 创建匿名对象的实例

转载 作者:行者123 更新时间:2023-11-30 21:40:55 25 4
gpt4 key购买 nike

我正在学习 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。

最佳答案

我想,除非我误会你只是想打电话

connection.Query(statement, parameters);

没有通用参数来完全按照您的要求进行操作,从而为您提供一个整洁的行。然后你可以写

connection.Query(statement, parameters).Select(x => new { Something = x.Something}); 

创建匿名对象。

或者为了变得更复杂一点,您可以通过将行转换为 IDictionary<string,object> 来转换为 expando 对象,并迭代地将属性分配给 expando 对象。

关于c# - 使用 Dapper 创建匿名对象的实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44067765/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com