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

C#中如何将SQL查询结果转换为数组/字典/数据框?

几种将C#查询结果转为字典/数据框的方案

针对你需要把ADVISORCHEMICALS表中匹配casnumber的记录转为字典、数组或数据框的需求,这里提供几种实用方案:

1. 手动构造字典(类型安全,可控性强)

如果明确知道需要哪些属性,直接手动构造字典,避免反射开销,同时保证类型安全:

// 先获取匹配的实体
var chemical = ADVISORCHEMICALS.FirstOrDefault(cdls => cdls.casnumber == casnumber);

if (chemical != null)
{
    var chemDict = new Dictionary<string, object>
    {
        ["boiling_point"] = chemical.boiling_point,
        ["melting_point"] = chemical.melting_point,
        // 依次添加其他30+属性,例如:
        // ["density"] = chemical.density,
        // ["molecular_weight"] = chemical.molecular_weight
    };
}

2. 反射自动生成字典(自动遍历所有属性)

如果需要自动包含实体的所有属性,不用手动逐个编写,可以用反射实现:

var chemical = ADVISORCHEMICALS.FirstOrDefault(cdls => cdls.casnumber == casnumber);

if (chemical != null)
{
    var chemDict = chemical.GetType()
                           .GetProperties(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance)
                           // 可选:过滤掉导航属性或复杂类型属性
                           .Where(prop => !prop.PropertyType.IsClass || prop.PropertyType == typeof(string))
                           .ToDictionary(prop => prop.Name, prop => prop.GetValue(chemical));
}

注意:如果实体包含导航属性(关联其他表的对象),建议加上Where条件过滤,避免把复杂类型存入字典。

3. 使用匿名类型(临时访问更简洁)

如果只是临时需要访问多个属性,匿名类型是最简洁的选择,后续可直接通过属性名访问:

var chemData = (from cdls in ADVISORCHEMICALS
                where cdls.casnumber == casnumber
                select new 
                {
                    cdls.boiling_point,
                    cdls.melting_point,
                    // 继续添加其他需要的属性
                }).FirstOrDefault();

// 访问示例
if (chemData != null)
{
    var bp = chemData.boiling_point;
    var mp = chemData.melting_point;
}

4. 转为DataTable(数据框形式)

如果需要类似表格的结构化数据(比如用于展示或批量处理),可以转成DataTable:

// 获取匹配的记录列表(单条的话用FirstOrDefault)
var chemicals = ADVISORCHEMICALS.Where(cdls => cdls.casnumber == casnumber).ToList();

DataTable dt = new DataTable();
// 自动生成DataTable列
var entityType = typeof(ADVISORCHEMICALS_Entity); // 替换为你的实体类名
foreach (var prop in entityType.GetProperties(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance))
{
    // 处理可空类型
    var columnType = Nullable.GetUnderlyingType(prop.PropertyType) ?? prop.PropertyType;
    dt.Columns.Add(prop.Name, columnType);
}

// 填充数据到DataTable
foreach (var chem in chemicals)
{
    DataRow row = dt.NewRow();
    foreach (var prop in entityType.GetProperties(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance))
    {
        row[prop.Name] = prop.GetValue(chem) ?? DBNull.Value;
    }
    dt.Rows.Add(row);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 09:25:41