CSHTML中从ICollection获取实际值而非引用的方法
问题分析
你的代码存在两个核心问题:
- 循环逻辑错误:foreach遍历
Model.Visit.ReferralICD10Codes中的每个item,但每次拼接时都调用FirstOrDefault()取集合的第一个元素,完全没用到当前遍历的对象,还会重复输出第一个元素多次。 - 默认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
相关产品推荐
相关产品推荐

