如何用LINQ的ToDictionary创建以元组(int,int)为键的字典?
关于使用复合主键创建LINQ字典的问题
可以编写类似的LINQ查询,但需要修正一处语法错误。你的代码里键选择器的lambda表达式写法有误,正确的写法应该是将两个主键字段包装成值元组作为字典的键:
Dictionary<(int, int), object> entity = _context.Table.ToDictionary(i => (i.IDOrigin, i.IDDestiny), o => o);
关键说明:
- C#的
ValueTuple(值元组)可以直接作为字典的键,因为它默认实现了GetHashCode()和Equals()方法,能正确处理哈希和相等性判断,完全符合字典键的要求。 - 你之前的错误在于把lambda表达式的参数和返回值写成了逗号分隔的形式,正确的做法是在lambda的主体部分返回一个元组
(i.IDOrigin, i.IDDestiny)。 - 这种方式完美适配复合主键的场景,能通过两个字段的组合唯一标识每个实体,和单一键的字典用法逻辑一致,只是键的类型从单一值变成了值元组。
如果你的实体类型不是object,建议替换成具体的实体类型,这样能获得更好的类型安全性,比如:
Dictionary<(int, int), YourEntityType> entity = _context.Table.ToDictionary(i => (i.IDOrigin, i.IDDestiny), o => o);
内容的提问来源于stack exchange,提问作者Weenhallo
相关产品推荐
相关产品推荐

