在LINQ中,加入多个表并按Id分组。

17 浏览
0 Comments

在LINQ中,加入多个表并按Id分组。

我想要按照categoryId显示产品名称列表,这是我的代码:

我希望我的视图显示结果:

台式电脑
|_ 惠普电脑 - 红色
|_ 戴尔电脑 - 黄色
|_ 华硕电脑 - 红色
智能手机
|_ Lumia 720 - 蓝色

我的GroupModel:

public class GroupModel
{
    public Category Categories { get; set; }
    public Product Products { get; set; }
}

我的控制器:

List listCategories = new List
{
    new Category {Id = 1, CateName = "智能手机"},
    new Category {Id = 2, CateName = "笔记本电脑"},
    new Category {Id = 3, CateName = "台式电脑"},
};
List listProducts = new List
{
    new Product {Id = 1, ProdName = "Lumia 720", CategoryId = 1, ColorId = 2},
    new Product {Id = 2, ProdName = "惠普电脑", CategoryId = 3, ColorId = 1},
    new Product {Id = 3, ProdName = "戴尔电脑", CategoryId = 3, ColorId = 1},
    new Product {Id = 4, ProdName = "联想笔记本电脑", CategoryId = 2, ColorId = 2},
    new Product {Id = 5, ProdName = "Lumia 920", CategoryId = 1, ColorId = 2},
    new Product {Id = 6, ProdName = "戴尔笔记本电脑", CategoryId = 2, ColorId = 3},
    new Product {Id = 7, ProdName = "惠普笔记本电脑", CategoryId = 2, ColorId = 3}
};
List listColor = new List
{
    new Color {ColorId = 1, ColorName = "蓝色"},
    new Color {ColorId = 2, ColorName = "黄色"},
    new Color {ColorId = 3, ColorName = "红色"}
};
var query = from c in listCategories
join p in listProducts on c.Id equals p.CategoryId
select new GroupModel
{
    Categories = c,
    Products = p
};
return View(query.ToList());

这是我的视图绑定列表,我使用GroupModel嵌套ProductModel和CategoryModel

@model IEnumerable

@foreach (var item in Model)

{

@Html.DisplayFor(model => item.Categories.CateName)

@Html.Label("|__ ") @Html.DisplayFor(model => item.Products.ProdName)

}

0
0 Comments

在LINQ中连接多个表并按Id分组的问题的出现原因是需要将Products表与Categories表进行左外连接,并按CategoryID对Products进行分组。为了解决这个问题,可以使用LINQ查询来实现。

在解决这个问题的过程中,首先需要进行表的连接操作。使用join关键字将ProductsCategories表连接起来,连接条件是两个表的CategoryID字段相等。使用into关键字将连接结果存储到一个新的变量e中。然后使用from关键字和DefaultIfEmpty()方法进行左外连接,将Products表的记录和Categories表的记录进行匹配。

接下来,使用group by关键字将Products表按CategoryID字段进行分组。使用select关键字创建一个匿名类型,该类型包含分组后的Products表和CategoryID字段的值。

在更新的版本中,还添加了一个新的GroupModel类,用于封装分组后的结果。GroupModel类包含CategoryIdCategoryNameProducts属性。

在第二次更新中,还添加了对Color表的连接操作。使用join关键字将Products表和Color表连接起来,连接条件是两个表的ColorId字段相等。再次使用into关键字将连接结果存储到一个新的变量e中。然后使用from关键字和DefaultIfEmpty()方法进行左外连接,将Products表的记录和Color表的记录进行匹配。

最后,使用group by关键字将连接后的结果按CategoryIDColorIdCategoryName字段进行分组。使用select关键字创建GroupModel对象,该对象包含分组后的结果。

整个过程中使用了LINQ查询语法和一些LINQ方法来实现连接和分组操作。最后通过遍历查询结果并输出结果来验证代码的正确性。输出结果按照要求进行了分组和显示。

0