我创建了一个多键字典,因为(registrantsFields是可枚举的类型)
var registrantsRepository = registrantsFields.ToDictionary(c => Tuple.Create(c.RegistrantID, c.FieldID, c.DataID));
我使用ContainsKey搜索字典
if (registrantsRepository.ContainsKey(Tuple.Create(registrantId, fieldId, dataId)))
到目前为止一切正常。
但我想只用2个键搜索字典,即某些字典包含某些registrantId和fieldId,但是包含任何dataId。换句话说,我喜欢找到所有项目,如
var entries = registrantsRepository(Tuple.Create(registrantId, fieldId, *))
应该怎么做(也许在Linq)?感谢。
答案 0 :(得分:4)
我只是创建一个单独的Lookup。
var registrantsByIdAndField = registrantsFields
.ToLookup(r => Tuple.Create(c.RegistrantID, c.FieldID));
然后你仍然可以快速查找:
var entries = registrantsByIdAndField[Tuple.Create(registrantId, fieldId)];
答案 1 :(得分:1)
没有像这样的通配符搜索,但有一种方法可以忽略那些您在搜索时不感兴趣的字段。
遍历Keys
的集合,引用您有兴趣匹配的Tuple
的属性。您可以使用LINQ的Any
方法执行此操作。
if (registrantsRepository.Keys.Any(x => x.Item1 == registrantId && x.Item2 == fieldId)
{
}
答案 2 :(得分:1)
这里所有的好答案。 ToLookup
是您的选择吗?
https://msdn.microsoft.com/en-us/library/bb549073(v=vs.100).aspx
编辑:刚刚意识到@StriplingWarrior打败了我!