使用lambda表达式

时间:2016-12-13 08:56:54

标签: c# asp.net-mvc entity-framework razor lambda

我首先使用实体​​框架数据库。

对于一对多关系,在sql server中,我使用以下sql查询(Status_ID是外键):

SELECT Products.*, Status.Title as Pstatus
FROM Products, Status 
WHERE Products.Status_ID = Status.ID

在MVC中,我使用以下代码检索与上面的sql查询相同的数据,并将列表传递给视图:

控制器:

var products = oDB.Products.Include(m => m.Status)
                       .ToList();
// string test = products[0].Status.Title;
return View(products);

在视图中,我可以通过以下代码访问所需数据:

查看:

@model List<myDB.Product>
...
@item.Status.Title // This works well for each item in the list

对于许多与JUNCTION TABLE的关系,这是我的.edmx:

enter image description here

现在我如何检索包括相关类别的产品列表? 我需要产品列表并将其作为列表传递给视图,并在视图中访问每个产品的类别。

我的类(这些类是自动生成的):

public partial class Category
{
    public int ID { get; set; }
    public string Title { get; set; }
    public virtual ICollection<Products_Categories> Products_Categories { get; set; }
}

public partial class Products_Categories
{
    public int ID { get; set; }
    public Nullable<int> Product_ID { get; set; }
    public Nullable<int> Category_ID { get; set; }
    public virtual Category Category { get; set; }
    public virtual Product Product { get; set; }
}

public partial class Product
{
    public int ID { get; set; }
    public string Title { get; set; }
    public virtual ICollection<Products_Categories> Products_Categories { get; set; }
}

2 个答案:

答案 0 :(得分:3)

var products = oDB.Products.Include(m => m.Product_Categories.Select(pc=>pc.Category))
                       .ToList();
// string test = products[0].Status.Title;
return View(products);

在视图中你可以像这样使用它

@foreach(var item in model){ 
   <h3>string.join(", ", item.Product_Categories.Select(pc=>pc.Category.Title))</h3> 
}

答案 1 :(得分:1)

您需要使用以下内容:

var products = oDB.Products.Include("Status")
                   .ToList();
// string test = products[0].Status.Title;
return View(products);