【问题标题】:Retrieving data from datatable从数据表中检索数据
【发布时间】: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")..

标签: c# linq datatable


【解决方案1】:

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

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

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

【讨论】:

  • 我已确认UserIDint 的形式存储在数据库中。
  • @smr5 users.Columns["UserID"].DataType 怎么样,它可以为空吗?
  • 我添加了更多细节。
  • @smr5 你还没有回答这个问题。 DataTable 的 .DataType 输出是什么?
  • 我正在检查...我对输出感到非常惊讶! {Name = "Int64" FullName = "System.Int64"},由于数据以 int 形式存储在 DB 中,但它正在转换为 Int64
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-22
  • 2012-02-07
  • 1970-01-01
  • 1970-01-01
  • 2018-12-09
相关资源
最近更新 更多