如何对多键字典进行部分搜索

时间:2016-06-14 23:20:48

标签: c# linq dictionary

我创建了一个多键字典,因为(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)?感谢。

3 个答案:

答案 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打败了我!