连接选择列表中两个类的两个字段

本文关键字:两个 字段 选择 列表 连接 | 更新日期: 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");