我正在尝试加入列表,将它们添加到viewmodel,并在视图中迭代这些列表。
IList<trace> traces = db.traces.Where(t => t.bureau_rep == "MGS").Take(20).ToList();
IList<business> businesses = new List<business>();
var joined = from t in traces
join b in businesses
on t.businessid equals b.businessid
select new vwhome { traces = t, business = b };
return View(joined);
视图模型看起来像这样......
public class vwhome
{
public trace traces { get; set; }
public business business { get; set; }
}
在视图中,我想显示跟踪列表,每个跟踪都有一个应该显示的业务。
我的问题是跟踪和业务不可枚举,所以我不能这样做......
public class vwhome
{
public IList<trace> traces { get; set; }
public business business { get; set; }
}
我该如何解决这个问题?
编辑 - 这显然不是一个好的解决方案,但至少它有效......
现在我正在填写视图模型......
IList<trace> traces = db.traces.Where(t => t.bureau_rep == "MGS").Take(20).ToList();
IList<business> businesses = new List<business>();
foreach (var item in traces)
{
businesses.Add(db.businesses.Find(item.businessid));
}
var viewModel = new vwhome();
viewModel.traces = traces;
viewModel.business = businesses;
这是我的看法......
@foreach(var item in Model.traces)
{
<tr>
<td>@Html.DisplayFor(model => item.bureau_rep)</td>
@foreach(var b in Model.business)
{
if(b.businessid == item.businessid)
{
<td>@Html.DisplayFor(model => b.name)</td>
}
}
</tr>
}
答案 0 :(得分:1)
trace
与business
的关系似乎有问题。尝试使用trace
和business
类之间的关系。看来trace
类应该与实体模型中的business
建立多对一的关系。不知道这些类的模型是什么样的,我建议您确保在类中有适当的引用。如果他们不在那里,请添加以下内容:
将此添加到您的trace
课程:
public virtual business business { get; set; }
将以下内容添加到business
课程中:
public business()
{
this.Traces = new List<trace>();
}
public virtual ICollection<trace> Traces { get; set; }
在你的tracemap
课程中添加关系:
this.HasOptional(t => t.business)
.WithMany(t => t.Traces)
.HasForeignKey(t => t.businessid);
完成此设置后,请尝试设置您的视图模型:
public class vmhome
{
public trace trace { get; set; }
public business business { get; set; }
}
并使用LINQ查询中的关系
var joined =
from t in traces select new vwhome
{
trace = t,
business = t.business
};
然后在您的视图中,您可以浏览您的参考:
@Html.DisplayFor(modelItem => item.trace.prop_1)
@Html.DisplayFor(modelItem => item.business.name)
您可以省略vm中的business
类,只是利用视图中的关系:
@Html.DisplayFor(modelItem => item.trace.business.name)
我希望有所帮助。
答案 1 :(得分:0)
您的traces
和business
字段需要是字符串,而不是实际对象,并使用跟踪名称和业务填充它们。然后你可以将它传递给你的视图,使其成为屏幕上显示的属性。
您靠近顶部的LINQ查询将返回IEnumerable<vwhome>
。
答案 2 :(得分:0)
如果我理解正确,您将在Trace类
中需要它public virtual vwhome vwhome { get; set; }
在你需要的vwhome课程中
public virtual ICollection<Trace > Traces { get; set; }
答案 3 :(得分:0)
您正在使用vwhome
个对象的集合,其中每个对象都包含trace
和vusiness
,因此您的视图将如下所示:
<ul>
@foreach (var item in Model)
{
<li>@(item.trace) @(item.business)</li>
}
</ul>