我得到一个带有 Entity Framework 的 LINQ 查询(EF) 并获取项目列表。现在我想创建一个字典,其中包含项目的递增索引和项目本身。
我是这样的:
result = context
.Items
.Where(b => !b.Deleted)
.OrderBy(b => b.Name)
.ToDictionary(COUNTHERE, b => b.Name)
所以字典必须看起来像这样:
1: "item1"
2: "item2"
3: "item5"
4: "item10"
5: "item100"
最佳答案
我认为你需要的是将项目名称作为键而不是计数作为键,因为如果有两个项目具有相同的计数,它将抛出已添加键的异常。
然后你可以在ToDictionary
之前使用GroupBy
,这样你就可以计数了。
result = context
.Items
.Where(b => !b.Deleted)
.GroupBy(x => x.Name)
.ToDictionary(g => g.Key, g => g.Count())
.OrderBy(g => g.Key);
根据你更新的评论,那么你需要的是
result = context
.Items
.Where(b => !b.Deleted)
.OrderBy(b => b.Name)
.AsEnumerable()
.Select((v,i) => new { i, v.Name })
.ToDictionary(g => g.i + 1, g => g.Name);
请注意,您需要添加 AsEnumerable
以便 Select
子句作为 linq to object (Select
that accept index is not supported in L2S)。
关于C# LINQ 获取字典计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25844264/