Linq,无法仅列出明显的结果

时间:2013-04-15 17:19:58

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

我有三个表,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());
}

如何写这个以删除多余的列表?这对我来说都是新手,所以对我很轻松。

5 个答案:

答案 0 :(得分:1)

您必须查询Manufacturers,而不是Vehicles

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

答案 1 :(得分:1)

通常可以尝试完全避免区别。你想要制造商吗?获得制造商。并从那里确定您需要哪些:生成类型名称中click_string的模型的那些:

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

您可能希望包含Models和/或VehicleType,具体取决于您希望在视图中显示的内容。

答案 2 :(得分:0)

您应该可以使用.Distinct返回不同的元素。

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

答案 3 :(得分:0)

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

答案 4 :(得分: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()可能有点冗长,但没有在我的视觉工作室中尝试它,我把它放在那里安全