【发布时间】:2018-04-26 18:03:44
【问题描述】:
我正在尝试使用LINQ 使用this 示例从DataTable 通过UserID 检索username。
//Example 1:
var user = (from dr in users.AsEnumerable()
where dr.Field<int>("UserID") == 2
select dr).First();
//Example 2:
string user = (from dr in users.AsEnumerable()
where dr.Field<int>("UserID") == 3
select dr.Field<string>("UserName")).First();
以上两个例子导致了这个转换错误:
System.InvalidCastException: '指定的强制转换无效。'
但是,如果我的 where clause 搜索 string 而不是 int,则查询确实有效。
string result = (from row in users.AsEnumerable()
where row.Field<string>("UserName") == "TUser"
select row.Field<string>("UserName")).First();
如何通过 userid 检索单个用户名?
更新:
不确定它是否相关,但通过使用 JSON.NET 反序列化 .json 文件来填充数据表
一个样本.json
[{ “用户 ID”:2, "用户名": "用户", “状态ID”:1, "创建日期": "2018-04-25T14:02:00", “创建者”:“管理员”, “ID”:“9855626A-FEF1-4936-9EF6-DD896F80AE35” }, { “用户 ID”:3, "用户名": "TUser", “状态ID”:1, "创建日期": "2018-04-25T14:02:00", “创建者”:“管理员”, “ID”:“928D6099-0665-4FC8-BE4C-8E145E56E8BF” } ]
并填充数据表:
DataTable users = JsonConvert.DeserializeObject<DataTable>(File.ReadAllText(userPath));
【问题讨论】:
-
那么
UserID的底层类型是什么? -
它是一个整数。
-
使用 dr.Field
("UserID")..