需要幫助才能僅根據 i.Code 選擇/獲取不同的條目。有重復項,因此我的運算式出現錯誤“已添加具有相同鍵的專案。 ”
var myDictionary = dbContext.myDbTable
.Where(i => i.shoesize>= 4)
.OrderBy(i => i.Code)
.ToDictionary(i => i.Code, i => i);
嘗試以不同的組合使用 Select 和/或 Distinct 并單獨使用,但仍然遇到相同的錯誤
var myDictionary= dbContext.myDbTable
.Where(i => i.shoesize>= 4)
.OrderBy(i => i.Code)
//.Select(i => i)
//.Distinct()
.ToDictionary(i => i.Code, i => i);
有人可以幫忙嗎?C#
更新:如果有多個物件具有相同的代碼,我只想將第一個物件(具有該特定代碼)添加到 myDictionary。
uj5u.com熱心網友回復:
您可以分組Code并從每個組中選擇第一項(相當于 distinct):
var myDictionary = dbContext.myDbTable
.Where(i => i.shoesize >= 4) // filter
.GroupBy(x => x.Code) // group by Code
.Select(g => g.First()) // select 1st item from each group
.ToDictionary(i => i.Code, i => i);
您不需要OrderBysinceDictionary代表無序集合。如果你需要一個有序的字典,你可以使用SortedDictionary.
uj5u.com熱心網友回復:
您可以使用字典,然后GroupBy按照 haldo在他的答案中顯示的那樣使用。但是由于您還沒有明確在重復的情況下要帶什么專案,我建議您使用不同的方法ToLookup。它具有與字典相同的查找性能,但允許重復鍵:
var codeLookup = dbContext.myDbTable
.Where(i => i.shoesize>= 4)
.ToLookup(i => i.Code);
如果您訪問查找,您總是會得到一個IEnumerable<T>,因為可能有 0、1 或多個專案。因此,如果您請求未包含的代碼,也不會出現例外。
uj5u.com熱心網友回復:
在我看來,您正在尋找的是.DistinctBy()(在 .NET 6 中可用),它允許您通過以下方式指定哪個屬性來區分集合中的元素:
var myDictionary= dbContext.myDbTable
.Where(i => i.shoesize>= 4)
.DistinctBy(i => i.Code)
.ToDictionary(i => i.Code, i => i);
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/434884.html
