我是 C# 新手,我試圖從我創建的 html.dropdownlist 中隱藏幾個專案,我有一個在 sql 中創建并鏈接到我的專案的虛擬串列,現在一切正常,但我的表中有值共享包含相同名稱的相同資料,我試圖將這些值保留在 sql 資料庫中,但更改我的視圖以隱藏下拉串列中的重復項。
這是我的 html 方法,它運行良好,但顯示了資料庫中的每個專案,包括多個具有相同名稱的條目。
@Html.DropDownListFor(m => m.TestId, new SelectList(Model.TestModel, "TestId", "TestName"))
我嘗試使用 .Distinct() ,這是我在研究該主題時發現的最常見的解決方案之一,但我不確定如何將其應用于我的代碼,因為以下兩個版本不起作用。
@Html.DropDownListFor(m => m.TestId, new SelectList(Model.TestModel.Select(x => x.model.TestName).Distinct()), "TestId", "TestName"))
`@Html.DropDownListFor(m => m.TestId, new SelectList(Model.TestModel, "TestId", "TestName").Distinct())`
我也嘗試使用 jquery 隱藏串列中的元素,但我無法隱藏重復項,最終要么隱藏了共享名稱的每個元素,要么必須單獨定位我想從表中隱藏的每個元素。
如果有人能夠指導我如何解決這個問題,我將不勝感激,在此先感謝!
uj5u.com熱心網友回復:
我想你想要這樣的東西
@Html.DropDownListFor(m => m.TestId, new SelectList(Model.TestModel.GroupBy(x => x.TestName).Select(x => x.FirstOrDefault()), "TestId", "TestName"))
這是一個簡短的控制臺程式來說明發生了什么:
var list = new List<TestModel>();
list.Add(new TestModel { TestId = 1, TestName = "abc" });
list.Add(new TestModel { TestId = 2, TestName = "mno" });
list.Add(new TestModel { TestId = 3, TestName = "xyz" });
list.Add(new TestModel { TestId = 4, TestName = "abc" });
// foreach (var i in list)
foreach (var i in list.GroupBy(x => x.TestName).Select(x => x.FirstOrDefault()))
{
Console.WriteLine(String.Format("TestId {0}, TestName {1}", i.TestId, i.TestName));
}
與注釋掉的 foreach 行相比,較長的 foreach 行使用 GroupBy 和 FirstOrDefault 將具有相同 TestName 值的條目分組在一起,然后僅從每個“匹配組”中選擇第一個。
請注意,TestId = 1 的條目通過了過濾器,但 TestId = 4 的條目沒有。您并沒有真正指定要保留的 TestId 值。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/523528.html