![](/img/trans.png)
[英]Mapping a related table into an IDictionary<Guid, Tuple<String, Int32>>
[英]Guid converted to int32
我正在尝试以编程方式将 where 子句添加到我的 gridview 的 LinqDatasource,但我不断收到异常消息:“运算符 '=' 与操作数类型 'Guid' 和 'Int32' 不兼容”
if (e.CommandName == "getuser")
{
int index = Convert.ToInt32(e.CommandArgument);
GridViewRow selectedRow = GridView1.Rows[index];
Guid id = new Guid(selectedRow.Cells[1].Text);
LinqDataSource2.Where = "UserID = " + id;
GridView1.DataSourceID = LinqDataSource2.ID;
GridView1.DataBind();
}
有谁知道我的 Guid 是如何、何时以及为什么转换为 int 的?
固定的
添加了一行
LinqDataSource2.WhereParameters.Add("UserID", System.Data.DbType.Guid, id.ToString());
我猜 int32 是标准类型,当 where 参数中没有设置任何内容时,只有 where 参数。 只是猜测,如果有人知道更多,请告诉我。
与 SQL 一样,您最好使用数据访问层中的工具将参数作为实际类型(根据需要使用适当的数据层 -> 数据库转换)而不是使用字符串传递。
看起来 LinqDataSource 有一个WhereParameters集合,所以你可以创建你的 where 类似的东西:
LinqDataSource2.Where = "UserID = @UserID";
然后将适当的参数添加到 WhereParameters 集合中。 (注意,我没有写过这样的代码,只是简单介绍了一些细节,但看起来是对的)
如果您要将您的 id 作为字符串与您的 GUID 进行比较,那么您需要将 GUID 字段转换为字符串。 实现此目的的最简单方法是在 GUILD 字段上调用 ToString() 方法。
尝试这个:
LinqDataSource2.Where = "UserID = '" + id.ToString("B") + "'";
这将以这种形式传递 GUID: {00000000-0000-0000-0000-000000000000}
希望这就是数据库所期望的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.