首页 > 解决方案 > 从数据表中检索数据

问题描述

我正在尝试使用此示例usernameaDataTable中检索 a 。UserIDLINQ

//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();

如何通过用户 ID 检索单个用户名?

更新:

不确定它是否相关,但是通过使用反序列化.json文件来填充数据表JSON.NET

一个样品.json

[{“UserID”:2,“UserName”:“User”,“StatusID”:1,“CreateDate”:“2018-04-25T14:02:00”,“CreateBy”:“Admin”,“ID”: “9855626A-FEF1-4936-9EF6-DD896F80AE35”},{“UserID”:3,“UserName”:“TUser”,“StatusID”:1,“CreateDate”:“2018-04-25T14:02:00”, “创建者”:“管理员”,“ID”:“928D6099-0665-4FC8-BE4C-8E145E56E8BF”}]

并填充数据表:

DataTable users = JsonConvert.DeserializeObject<DataTable>(File.ReadAllText(userPath));

标签: c#linqdatatable

解决方案


您需要为UserID列使用正确的数据类型

检查您的用户 ID 在 DB 中的列类型并使用下表

BigInt -> long
int -> int
SmallInt -> short
varchar/nvarchar -> string

推荐阅读