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

CSHTML中从ICollection获取实际值而非引用的方法

问题分析

你的代码存在两个核心问题:

  1. 循环逻辑错误:foreach遍历Model.Visit.ReferralICD10Codes中的每个item,但每次拼接时都调用FirstOrDefault()取集合的第一个元素,完全没用到当前遍历的对象,还会重复输出第一个元素多次。
  2. 默认ToString()行为:直接调用ReferralICD10Code对象的ToString(),默认会输出类型的完全限定名称(包括EF动态代理的后缀),而非实体的实际业务数据。
解决方案

1. 修正循环逻辑,访问实体具体属性

先确定ReferralICD10Code实体中存储ICD10编码的实际属性(比如Code、ICD10Code等,根据你的实体字段名调整),然后在循环中使用当前遍历的item访问该属性:

@{ 
    var reficd10codes = "";
    foreach (var item in Model.Visit.ReferralICD10Codes)
    {
        // 替换为你实际需要的属性名,比如item.Code
        reficd10codes += " " + item.Code;
    }
    // 移除开头多余的空格
    reficd10codes = reficd10codes.Trim();
}

2. 更简洁的写法:使用String.Join

用String.Join直接拼接集合中每个元素的目标属性,省去手动循环拼接的冗余代码:

@{
    // 替换为实际属性名,比如item.Code
    var reficd10codes = string.Join(" ", Model.Visit.ReferralICD10Codes.Select(item => item.Code));
}

3. 可选:重写ReferralICD10Code的ToString()方法

如果需要在多个场景下直接通过ToString()获取实体的显示值,可以在ReferralICD10Code实体类中重写该方法:

public class ReferralICD10Code
{
    // 你的其他属性
    public string Code { get; set; }
    public string Description { get; set; }

    public override string ToString()
    {
        // 返回你想要显示的内容,比如编码加描述
        return $"{Code} - {Description}";
    }
}

重写后,可直接简化CSHTML中的代码:

@{
    var reficd10codes = string.Join(" ", Model.Visit.ReferralICD10Codes);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 13:50:45