C# 将ExpandoObject作为参数传递
我有一些类似这样的sql函数(用C#编写): 我想这样打电话: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类型会减少编码) 但是,
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);