我需要在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() - 没有一个工作
答案 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");