0

请你看看我的代码并指出我正确的方向。我有 2 个表:Product 和 vProductAndDescription。我需要 Product 中的 Name 和 LisPrice 以及 vProductAndDescription 中的 Description 分别由它们的 ProductID 加入。在我看来,我是否走在了实现这一目标的正确轨道上?因为到目前为止它只是崩溃。

控制器:

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>
4

1 回答 1

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);
于 2013-08-05T08:18:09.067 回答