簡體   English   中英

Linq,無法僅列出明顯的結果

[英]Linq, unable to list only distinct results

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

如何寫這個以刪除多余的列表? 這對我來說都是新的,所以對我來說很容易。

您必須查詢Manufacturers ,而不是Vehicles

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

它通常可以很好地避免完全區分。 你想要制造商嗎? 獲得制造商。 並從那里確定您需要哪些:生成在其類型名稱中具有click_string模型的那些:

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

您可能希望包含Models和/或VehicleType ,這取決於您要在視圖中顯示的內容。

您應該能夠使用.Distinct返回不同的元素。

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

首先嘗試在查詢結束時執行.Distinct() ,如果它不起作用,則可能需要為.Distinct()提供自定義比較器。

添加明顯

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

.Select()可能有點冗長,但沒有在我的視覺工作室中嘗試它我把它放在那里安全

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM