连接选择列表中两个类的两个字段
本文关键字:两个 字段 选择 列表 连接 | 更新日期: 2023-09-27 18:18:46
我需要在一个selectList中连接来自2个不同类的两个字段。因此,我在类中创建了一个非映射字段,我希望能够基于虚拟字段(指向另一个表)从中提取。然而,当我试图运行它时,我得到了一个奇怪的错误。
下面是我的类代码: [Display(Name = "Problem")]
[ForeignKey("Problem")]
[Required]
public Guid ProblemId { get; set; }
public virtual Problem Problem { get; set; }
[Display(Name = "Category")]
[NotMapped]
public string FullCategory
{
get
{
return "(" + this.Problem.ProblemName.ToString() + ") " + CategoryName;
}
}
,然后选择列表:
ViewBag.CategoryId = new SelectList(db.Categories.Where(c => c.Status == 1).OrderBy(c => c.Problem.ProblemName), "CategoryId", "FullCategory");
并在这一行崩溃:
return "(" + this.Problem.ProblemName.ToString() + ") " + CategoryName;
出现错误:
{"已经有一个与此命令相关联的打开的数据读取器必须先关闭。"}
但是,如果我将代码更改为:
return "(" + Status + ") " + CategoryName;
然后它的工作,但当然这不是我正在寻找的结果。状态是这个类中的另一个字段。
我也尝试了它没有。tostring(),我尝试了它与。first() -它们都没有工作
当在数据连接上同时打开两个数据读取器时,通常会发生该错误。您可以尝试在连接字符串(https://msdn.microsoft.com/en-us/library/h32h3abf%28v=vs.110%29.aspx)上启用多个活动结果集。
string connectionString = "Data Source=myDataSource;" +
"Initial Catalog=myCatalog;Integrated Security=mySecurity;" +
"MultipleActiveResultSets=True";
您可以尝试枚举查询。
ViewBag.CategoryId = new SelectList(
db.Categories
.Include("Problem") // eager load
.Where(c => c.Status == 1)
.OrderBy(c => c.Problem.ProblemName)
.ToList(), // enumerate
"CategoryId",
"FullCategory");