0

我有三个表,car_type、car_manufacturer 和 car_model。当用户单击他们想要浏览的特定车辆类型时,我想向他们显示可用制造商的列表。问题是制造商的名单不是独特的或独特的。因此,如果我的数据库中有三款马自达的车型,马自达将出现 3 次。这是我的控制器:

    public ActionResult Browse(string click_string)     
    {
         var x = carDB.Models
                 .Include(b => b.Manufacturer)
                 .Include(a => a.VehicleType)
                 .Where(a => a.VehicleType.TypeName == click_string);
         return View(x.ToList());
}

我怎样才能写这个来删除多余的列表?这对我来说是全新的,所以请放轻松。

4

5 回答 5

1

您必须查询Manufacturers,而不是查询Vehicles

var x = carDB.Models.Where(a => a.VehicleType.TypeName == click_string)
                    .Select(a => a.Manufacturer)
                    .Distinct();
于 2013-04-15T17:33:57.353 回答
1

尝试完全避免 Distinct 通常效果很好。你要制造商吗?找厂家。并从那里确定您需要哪些:生成具有click_string类型名称的模型的模型:

carDB.Manufacturers.Where(manufacturer => manufacturer.Models
                   .Any(model => model.VehicleType.TypeName == click_string))

您可能想要包含Models和/或VehicleType,这取决于您要在视图中显示的内容。

于 2013-04-15T17:49:02.227 回答
0

您应该能够使用.Distinct返回不同的元素。

var x = carDB.Models
        .Include(b => b.Manufacturer)
        .Include(a => a.VehicleType)
        .Where(a => a.VehicleType.TypeName == click_string)
        .Distinct();
于 2013-04-15T17:21:18.733 回答
0

首先尝试在.Distinct()查询末尾执行 a ,如果它不起作用,您可能需要为 .Distinct() 提供自定义比较器

于 2013-04-15T17:21:55.823 回答
0

添加不同的

var x = carDB.Models
        .Include(b => b.Manufacturer)
        .Include(a => a.VehicleType)
        .Where(a => a.VehicleType.TypeName == click_string)
        .Select(y => y)
        .Distinct();

.Select() 可能有点冗长,但没有在我的视觉工作室中尝试它,我把它放在那里是为了安全

于 2013-04-15T17:22:09.910 回答