gpt4 book ai didi

c# - 通过使用 LINQ 跳过空值将 Dictionary 转换为 Dictionary

转载 作者:行者123 更新时间:2023-11-30 13:15:10 26 4
gpt4 key购买 nike

我有以下 Product类:

public class Product
{
public string Name { get; set; }
public float Price { get; set; }
public int? CategoryId { get; set; }
}

现在我必须数出有多少Product我每个人都有 CategoryId并将它们放在 Dictionary<int, int> 中.因此:

IQueryable<Product> products = _productServices.GetAll(); //return IQueryable<Product>

Dictionary<int, int> productDict = products.ToList()
.GroupBy(p => p.CategoryId)
.ToDictionary(pgroup => pgroup.key, pgroup => pgroup.Count());

问题是我获得了一个 Dictionary<int?, int>来自 ToDictionary() .即使我通过放置 Where(p => p.CategoryId != null) 来预过滤空值我不更改 CategoryId 的类型至 int .我还尝试创建匿名类型:

products.ToList()
.GroupBy(p => p.CategoryId)
.Select(p => new { p.key ?? -1, p.Count() }
.ToDictionary(pgroup => pgroup.key, pgroup => pgroup);

但它给出了一个 Invalid anonymous type member declarator错误。我还尝试删除 ToList()但没有运气。我用谷歌搜索了一下,没有发现任何人有这个问题,尽管我认为这种情况可能很常见,尤其是在使用 EF数据库 时。有人有解决方案吗?

最佳答案

那是因为 CategoryId 可以为 null。所以你需要选择它的 Value属性优先:

products.ToList()
.Where(p => p.CategoryId.HasValue)
.Select(p => p.CategoryId.Value)
.GroupBy(i => i)
.ToDictionary(g => g.Key, g => g.Count());

关于c# - 通过使用 LINQ 跳过空值将 Dictionary<int, int?> 转换为 Dictionary<int, int>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13451558/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com