请你看看我的代码并指出我正确的方向。 我有2个表:Product和vProductAndDescription。我需要Product中的Name和LisPrice以及分别通过其ProductID连接的vProductAndDescription的描述。在我看来,我是否正确地实现了这一目标?因为到目前为止它只是崩溃。
控制器:
public ActionResult Index()
{
string query = "SELECT v.Name, p.ListPrice, LEFT(v.Description, 20) from SalesLT.vProductAndDescription v, SalesLT.Product p WHERE v.ProductID = p.ProductID";
var list = db.Database.SqlQuery<Product>(query);
var result = from a in list.ToList()
join b in db.vProductAndDescriptions on a.ProductID equals b.ProductID
select new
{
c = a.Name,
d = a.ListPrice,
e = b.Description
};
return View(result.ToList());
}
查看:
@{
ViewBag.Title = "Index";
}
<h2>Index</h2>
<table>
<tr>
<th>Name
</th>
<th>Price (R)
</th>
<th>Description
</th>
<th></th>
</tr>
@foreach (var item in ViewData.Model) {
<tr>
<td>
@Html.DisplayFor(modelItem => item.Name)
</td>
<td>
@Html.DisplayFor(modelItem => item.ListPrice)
</td>
<td>
@Html.DisplayFor(modelItem => item.Description)
</td>
</tr>
}
</table>
答案 0 :(得分:2)
您的电话var list = db.Database.SqlQuery<Product>(query);
尝试创建类型为Product
的列表但您的实际查询未返回创建ProductID
类型所需的Product
参数。此外,您期望从线
var result = from a in list.ToList()
join b in db.vProductAndDescriptions on a.ProductID equals b.ProductID
select new
{
c = a.Name,
d = a.ListPrice,
e = b.Description
};
首先,您需要一个ViewModel来保存您的值,因为您没有将整个现有对象传递给您的视图。
public class ProductDescriptionsViewModel {
public string Name {get;set;}
public string ListPrice {get;set;}
public string Description {get;set;}
}
位于顶部的查看代码中:
@model IEnumerable<YourFullNamespace.ProductDescriptionsViewModel>
在您的查询中,您实际上正在对数据库进行2次调用,让我们看看是否可以重新安排事情来接听一个电话:
string query = "SELECT v.Name as Name, p.ListPrice as ListPrice, LEFT(v.Description, 20) as Description from SalesLT.vProductAndDescription v, SalesLT.Product p WHERE v.ProductID = p.ProductID";
var viewModel = db.Database.SqlQuery<ProductDescriptionsViewModel>(query);