C#linq得到计数字典

And*_*ter 2 c# linq counter dictionary entity-framework

我得到了一个带有EF的linq查询并获得了一个项目列表.现在我想创建一个字典,其中包含项目的增量索引和项目本身.

我喜欢这样:

result = context
    .Items
    .Where(b => !b.Deleted)
    .OrderBy(b => b.Name)
    .ToDictionary(COUNTHERE, b => b.Name)
Run Code Online (Sandbox Code Playgroud)

因此字典必须如下所示:

1: "item1"
2: "item2"
3: "item5"
4: "item10"
5: "item100"
Run Code Online (Sandbox Code Playgroud)

Yul*_*dra 6

我认为您需要的是将项目名称作为键而不是计数作为键,因为如果有两个具有相同计数的项目,则会抛出已添加该键的异常.

然后您可以使用GroupBy之前,ToDictionary以便您可以计算它.

result = context
    .Items
    .Where(b => !b.Deleted)
    .GroupBy(x => x.Name)
    .ToDictionary(g => g.Key, g => g.Count())
    .OrderBy(g => g.Key);
Run Code Online (Sandbox Code Playgroud)

根据您更新的评论,您需要的是

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);
Run Code Online (Sandbox Code Playgroud)

请注意,您需要添加AsEnumerable以使该Select子句作为对象的linq(Select在L2S中不支持接受索引).