You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在VB.NET中通过查询记录从DataTable读取数据

查询无类型Dataset中DataTable的简便方法

核心实现思路

  • 优先通过Skillname查询:利用LINQ to DataSet直接匹配字符串,无需手动处理空格、引号等特殊字符,避免查询语法错误。
  • 若Skillname未匹配到结果,再通过主键Skill_ID查询(主键查询效率更高且无特殊字符问题)。
  • 提取结果时使用Field<T>方法安全转换列值到对应类型,确保类型匹配。

代码示例(C#)

方法1:推荐使用LINQ to DataSet(简洁安全)

// 定义要查询的目标值
string targetSkillName = "你的技能名称(含空格/引号/连字符)";
int targetSkillId = 123; // 备用查询的Skill_ID

// 获取目标DataTable
DataTable skillTable = ds_Databank_Skills.Tables["dtab_Skills_Summary"];

// 优先按Skillname查询
DataRow skillRow = skillTable.AsEnumerable()
    .FirstOrDefault(row => row.Field<string>("Skillname") == targetSkillName);

// 未找到则按Skill_ID查询
if (skillRow == null)
{
    skillRow = skillTable.AsEnumerable()
        .FirstOrDefault(row => row.Field<int>("Skill_ID") == targetSkillId);
}

// 提取数据到对应类型变量
if (skillRow != null)
{
    int skillId = skillRow.Field<int>("Skill_ID");
    string skillName = skillRow.Field<string>("Skillname");
    bool lus = skillRow.Field<bool>("Lus");
    bool expert = skillRow.Field<bool>("Expert");
    string categorie = skillRow.Field<string>("Categorie");
    string attribut = skillRow.Field<string>("Attribut");
    short epCost = skillRow.Field<short>("EP_Cost");
    short maxLevel = skillRow.Field<short>("Max_Level");
    string description = skillRow.Field<string>("Description");

    // 此处可使用上述变量进行后续业务逻辑处理
}
else
{
    // 处理未查询到数据的场景
    Console.WriteLine("未找到匹配的技能数据");
}

方法2:使用DataTable.Select方法(需处理特殊字符)

如果偏好传统的Select语法,需要手动转义特殊字符(比如单引号替换为两个单引号):

string targetSkillName = "带'引号的技能名称";
int targetSkillId = 123;
DataTable skillTable = ds_Databank_Skills.Tables["dtab_Skills_Summary"];

// 转义Skillname中的单引号
string escapedSkillName = targetSkillName.Replace("'", "''");
DataRow[] matchedRows = skillTable.Select($"Skillname = '{escapedSkillName}'");
DataRow skillRow = matchedRows.FirstOrDefault();

// 未找到则按Skill_ID查询
if (skillRow == null)
{
    matchedRows = skillTable.Select($"Skill_ID = {targetSkillId}");
    skillRow = matchedRows.FirstOrDefault();
}

// 提取变量的逻辑同方法1
if (skillRow != null)
{
    // 转换类型并赋值
}

关键说明

  • AsEnumerable():将DataTable转换为可枚举的DataRow集合,支持LINQ查询。
  • Field<T>():安全地将列值转换为指定类型,自动处理DBNull(若列可能为空,可使用可空类型,如Field<bool?>("Lus"))。
  • 优先使用LINQ方式:无需手动处理特殊字符,代码可读性更高,类型安全性更强。

内容的提问来源于stack exchange,提问作者Arashya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 00:50:27