C# LINQ 获取字典计数

标签 c# linq entity-framework dictionary counter

我得到一个带有 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/

相关文章:

c# - 获取特定级别的目录

c# - 分割文本并将其放入字典中

sql - 使用 SQL 排序规则影响性能

c# - 在 ASP.NET(C#) 中填充 GridView 时出现问题

c# - 为什么给出错误表达式不能包含 lambda 表达式?

vb.net - 如何使用 LINQ 选择最新且不同的记录?

c# - 为什么在类型 '' 上声明的导航属性 '' 已配置有冲突的多重性。错误出现?

c# - EF 6 加上几个数据库上下文

c# - CodeFirst EF4.1 MVC Against legacy database - 多重性冲突

c# - 您可以通过使用其构造函数来创建嵌套列表的深拷贝吗?