连接选择列表

时间:2015-10-21 19:19:31

标签: c# asp.net-mvc class concatenation

我需要在selectList中连接两个不同类的两个字段。所以我在类中创建了一个非映射字段,我希望能够根据虚拟字段(指向另一个表)来提取。但是,当我尝试运行它时,我得到一个奇怪的错误。

这是我的班级代码:

  [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;

出现此错误:

  

{“已经有一个与此命令关联的打开DataReader   必须先关闭。“}

但是,如果我将代码更改为:

return "(" + Status + ") " + CategoryName;

然后它有效,但当然不是我要找的结果。状态是此类中的另一个字段。

我也尝试过没有.ToString(),我尝试了.First() - 没有一个工作

2 个答案:

答案 0 :(得分:0)

当您在数据连接上同时打开两个数据读取器时,通常会发生该错误。您可以尝试在连接字符串(https://msdn.microsoft.com/en-us/library/h32h3abf%28v=vs.110%29.aspx)上启用多个活动结果集。

function K = rbf(coord,sig)

%function K = rbf(coord,sig)
%
% Computes an rbf kernel matrix from the input coordinates
%
%INPUTS
% coord =  a matrix containing all samples as rows
% sig = sigma, the kernel width; squared distances are divided by
%       squared sig in the exponent
%
%OUTPUTS
% K = the rbf kernel matrix ( = exp(-1/(2*sigma^2)*(coord*coord')^2) )
%

n=size(coord,1);
K=coord*coord'/sig^2;
d=diag(K);
K=K-ones(n,1)*d'/2;
K=K-d*ones(1,n)/2;
K=exp(K);

%% Previous version:
%%
% n = size(coord,1);
% for i=1:n
%     K(i,i)=1;
%     for j=1:i-1
%         K(i,j)=exp(-norm(coord(i,:)-coord(j,:))^2/sig^2);% Should be
%         % 2*sig^2!
%         K(j,i)=K(i,j);
%     end
% end

答案 1 :(得分:0)

您可以尝试枚举查询。

ViewBag.CategoryId = new SelectList(
     db.Categories
       .Include("Problem") // eager load
       .Where(c => c.Status == 1)
       .OrderBy(c => c.Problem.ProblemName)
       .ToList(), // enumerate 
     "CategoryId", 
     "FullCategory");