我有三个表,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());
}
如何写这个以删除多余的列表?这对我来说都是新手,所以对我很轻松。
答案 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()可能有点冗长,但没有在我的视觉工作室中尝试它,我把它放在那里安全