Linq 获取 Distinct ToDictionary
Linq get Distinct ToDictionary
仅 select/get 个基于 i.Code 的不同条目需要帮助。
有重复项,因此我的表达式“已添加具有相同键的项目。”
var myDictionary = dbContext.myDbTable
.Where(i => i.shoesize>= 4)
.OrderBy(i => i.Code)
.ToDictionary(i => i.Code, i => i);
已尝试使用 Select and/or 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。
您可以按 Code
和 select 分组,每个组中的第一项(相当于不同):
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);
您不需要 OrderBy
,因为 Dictionary
代表无序集合。如果你需要一个有序的字典,你可以使用 SortedDictionary
.
在我看来,您正在寻找的是 .DistinctBy()
(在 .NET 6 中可用),它允许您指定哪个 属性 来区分集合中的元素:
var myDictionary= dbContext.myDbTable
.Where(i => i.shoesize>= 4)
.DistinctBy(i => i.Code)
.ToDictionary(i => i.Code, i => i);
通过首先划分它并创建一个列表,与将其全部捆绑到一个 linq 中相比,它可以工作,猜测 First() 需要它在列表中才能使其成为字典。
var firstLinq = dbContext.myDbTable
.Where(i => i.shoesize>= 4)
.ToList();
然后
var finalLinq = fromConcurWithDuplicates
.GroupBy(i => i.Code)
.Select(i => i.First())
.ToList()
.ToDictionary(i => i.Code, i => i);
仅 select/get 个基于 i.Code 的不同条目需要帮助。 有重复项,因此我的表达式“已添加具有相同键的项目。”
var myDictionary = dbContext.myDbTable
.Where(i => i.shoesize>= 4)
.OrderBy(i => i.Code)
.ToDictionary(i => i.Code, i => i);
已尝试使用 Select and/or 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。
您可以按 Code
和 select 分组,每个组中的第一项(相当于不同):
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);
您不需要 OrderBy
,因为 Dictionary
代表无序集合。如果你需要一个有序的字典,你可以使用 SortedDictionary
.
在我看来,您正在寻找的是 .DistinctBy()
(在 .NET 6 中可用),它允许您指定哪个 属性 来区分集合中的元素:
var myDictionary= dbContext.myDbTable
.Where(i => i.shoesize>= 4)
.DistinctBy(i => i.Code)
.ToDictionary(i => i.Code, i => i);
通过首先划分它并创建一个列表,与将其全部捆绑到一个 linq 中相比,它可以工作,猜测 First() 需要它在列表中才能使其成为字典。
var firstLinq = dbContext.myDbTable
.Where(i => i.shoesize>= 4)
.ToList();
然后
var finalLinq = fromConcurWithDuplicates
.GroupBy(i => i.Code)
.Select(i => i.First())
.ToList()
.ToDictionary(i => i.Code, i => i);