C# 将ExpandoObject作为参数传递

C# 将ExpandoObject作为参数传递,c#,dynamic,C#,Dynamic,我有一些类似这样的sql函数(用C#编写): 我想这样打电话: dbHandler.Query("SELECT * FROM ... WHERE loginID = @loginID", new { loginID = "username" }); 我想使用ExpandooObject保存参数集的原因是: 1.ExpandooObject实现IDictionary接口,避免反射 2.我不想写额外的行来声明一个新的Dictionary对象来存储值(传递annonymous类型会减少编码) 但是,

我有一些类似这样的sql函数(用C#编写):

我想这样打电话:

dbHandler.Query("SELECT * FROM ... WHERE loginID = @loginID", new { loginID = "username" });
我想使用ExpandooObject保存参数集的原因是:

1.ExpandooObject实现IDictionary接口,避免反射

2.我不想写额外的行来声明一个新的Dictionary对象来存储值(传递annonymous类型会减少编码)

但是,编译器报告的错误如下:

cannot convert from '<anonymous type: string loginID>' to 'System.Dynamic.ExpandoObject'
无法从“”转换为“System.Dynamic.ExpandooObject”

有没有办法解决这个问题P

最简单的答案是不要自己重新创造。只需使用它,它提供了这些类型的扩展,并处理参数以及结果读取器到类的映射。

匿名类型不是expando对象。您需要创建一个

dynamic user = new ExpandoObject();
user.loginID = "username";
dbHandler.Query("SELECT * FROM ... WHERE loginID = @loginID", user);

但现在您没有正确设置参数的SqlDbType,这可能会导致数据库中出现意外行为。您必须在expando的字段上调用
GetType()
,并映射到SqlDbType,而您似乎正试图避免出现混乱。

thanx用于该工具!是的,它可以工作,但是它会浪费额外的行来声明一些变量为“动态的”,这是我想要避免的。无论如何,非常感谢!
dynamic user = new ExpandoObject();
user.loginID = "username";
dbHandler.Query("SELECT * FROM ... WHERE loginID = @loginID", user);