C#Linq查询 - 将结果返回到View

时间:2014-08-10 19:18:21

标签: c# asp.net asp.net-mvc-3 linq-to-sql

我对c#

非常陌生

我有以下linq查询:

public GetAllProducts[] AllProducts(int status)
{
    try
    {
        using (UserDataDataContext db = new UserDataDataContext())
        {
            return db.mrobProducts.Where(x => x.Status == status).Select(x => new GetAllProducts { Name = x.Name, Desc = x.Description, Price = x.Price }).OrderBy(x => x.Name).ToArray();
        }
    }
    catch
    {
        return null;
    }
}

我希望能够做的就是从我的控制器中调用它,并为返回的每个产品组创建一个列表并将其加载到我的视图中。

我的控制器如下,但我不知道如何创建列表,并将其传递给我的视图,我很困惑。

public ActionResult Index(GetAllProducts allProductsModel)
{
    var webService = new DaveyServiceClient();
    webService.AllProducts(1);
    var allProducts = webService2.AllProducts();
    return View("../Private/Index", allProducts);
}

1 个答案:

答案 0 :(得分:1)

您的实体名称实在令人困惑,为什么“GetAllProducts”对我来说听起来像是一个功能......我将其重命名为Product。新的存储库代码:

public Ienumerable<Product> AllProducts(int status)
    {
        try
        {
            using (UserDataDataContext db = new UserDataDataContext())
            {
                return db.mrobProducts.Where(x => x.Status == status).Select(x => new Product
                {
                    Name = x.Name,
                    Desc = x.Description,
                    Price = x.Price
                }).OrderBy(x => x.Name);
            }
        }
        catch
        {
            return null;
        }
    }

您的控制器几乎不错,只需重命名实体,我建议使用DI而不是在代码中创建特定对象。此外,您无需添加View的相对路径,只需为Controller创建相同的文件夹层次结构。

这是您的型号代码(cshtml):

@model IEnumerable<Product>

@{
    ViewBag.Title = "All Products";
    Layout = "~/Views/Shared/_Layout.cshtml";
}

@foreach (var item in Model)
{
   //Show your products
   <p>item.Name</p>
}