我有一个包含2个表(客户和汽车)的数据库。 桌车有一个名为client_id的列。 在我的Razor Pages项目中,我为2个表创建了模型,但是我需要执行INNER JOIN将结果返回到视图侧并执行foreach循环。 所以直到现在,我都使用IList并在.cshtml中执行此操作:
@foreach (var item in Model.clients)
{
<p>@Html.DisplayFor(x=> item.name)</p>
<p>@Html.DisplayFor(x=> item.mail)</p>
}
在代码cshtm.cs中
public IList<establishments> establishments;
IQueryable<establishments> establishments_filter;
establishments_filter = (from x in db.establishments where x.category == category select x);
establishments = establishments_filter.ToList();
现在的问题是,我不能使用内部联接做同样的事情,或者我不知道(最可能)如何做。 我在其他帖子中看到我可以使用变量来接收如下值:
var filter = (from x in db.cars join y in db.clients on x.id_client == y.id select new {
mark = x.mark,
model = x.model,
name = y.name,
mail = y.name
}.ToList();
但是现在,我的真正问题是...如果在cshtml中不需要var过滤器,我该如何做foreach?
谢谢
答案 0 :(得分:2)
我认为您可以定义一个包含filter
对象中的字段的viewModel。然后,您可以在页面中foreach viewModel。如下所示的简单演示:
型号:
public class Car
{
public int id { get; set; }
public string mark { get; set; }
public string model { get; set; }
[ForeignKey("Client")]
public int client_id { get; set; }
}
public class Client
{
public int id { get; set; }
public string name { get; set; }
public string mail { get; set; }
}
ViewModel:
public class ViewModel
{
public string Mark { get; set; }
public string Model { get; set; }
public string Name { get; set; }
public string Mail { get; set; }
}
Index.cshtml:
@page
@model RazorPageApp.Pages.IndexModel
@{
ViewData["Title"] = "Index";
}
<table>
<thead>
<tr>
<th>Mark</th>
<th>Model</th>
<th>Name</th>
<th>Mail</th>
</tr>
</thead>
@foreach (var item in Model.filter)
{
<tr>
<td>@Html.DisplayFor(x => item.Mark)</td>
<td>@Html.DisplayFor(x => item.Model)</td>
<td>@Html.DisplayFor(x => item.Name)</td>
<td>@Html.DisplayFor(x => item.Mail)</td>
</tr>
}
</table>
Index.cshtml.cs:
public class IndexModel : PageModel
{
private readonly ILogger<IndexModel> _logger;
private readonly MyDbContext _db;
public IndexModel(ILogger<IndexModel> logger, MyDbContext db)
{
_db = db;
_logger = logger;
}
public List<ViewModel> filter { get; set; }
public async Task OnGetAsync()
{
filter = await (from x in _db.cars
join y in _db.clients on x.client_id equals y.id
select new ViewModel
{
Mark = x.mark,
Model = x.model,
Name = y.name,
Mail = y.mail
}).ToListAsync();
}
数据源:
结果: