C# 使用Linq从包含XElement列表的Dictionary对象(<;string,List<;XElement>;)检索XElement

C# 使用Linq从包含XElement列表的Dictionary对象(<;string,List<;XElement>;)检索XElement,c#,linq,dictionary,C#,Linq,Dictionary,我有一个Dictionary对象,它有一个键和XElements列表(超过380000个)。我必须根据XElement值从XElements列表中检索XElement var input ="9879-9890-223-abc-test"; var matchingKeys = dictionaryObj .Where(kvp => kvp.Value.ToString().Contains(input))

我有一个Dictionary对象,它有一个键和
XElement
s列表(超过380000个)。我必须根据
XElement
值从
XElement
s列表中检索
XElement

var input ="9879-9890-223-abc-test";

var matchingKeys = dictionaryObj
                      .Where(kvp => kvp.Value.ToString().Contains(input))
                                     .Select(kvp => kvp.Value);
使用以下代码创建Dictionary对象:

Dictionary<string, List<XElement>> dictionaryObj = new Dictionary<string, List<XElement>>();
dictionaryObj.Add("KeyName", new List<XElement>());

dictionaryObj["KeyName"].Add(xelementObj); //this line is in a for loop using which I am adding all the XElements to Dictionary object

由于字典的值为
List
类型,您需要对照列表中包含的值进行检查:

var matchingKeys = dictionaryObj
                   .Where(kvp => kvp.Value.Any(xElement => xElement.Value == input))
                   .Select(kvp => kvp.Value);
我的示例将XElement值(文本内容)与提供的输入进行比较。根据需要随时调整


HTH

感谢大家提供的意见。通过以下代码,我能够检索XElement

foreach (var item in dictionaryObj)
{
    var matchedXElement = item.Value.Where(x => x.Value.Contains(input));
}

字典中的KVP值是一个列表,而不是一个字符串,因此对其调用
ToString
没有多大意义。很难从这个问题中看出您想要做什么,因为看起来,您正在向同一个键上的列表添加一组元素。您可以直接对列表使用linq,或者将元素添加到一个字典中,其中的键是您试图搜索的对象。似乎您需要类似于
dictionaryObj.FirstOrDefault(kvp=>kvp.Value(x=>x.ToString().Contains(input))?.Value
的东西,但是如果您是按值搜索
XElement
,你为什么要使用
字典
?理想情况下,该键应该用来帮助缩小搜索范围…为不清楚而道歉。我有以下项目(超过30万)。9879-9890-223-abc-test 9999-9893-111-234-444t我要检索整个,因为Tag1_1值与我正在搜索的值相同。我之所以选择Dictionary,是因为我想将所有元素都存储在Dictionary中,这样与使用XmlReader进行提取相比,我可以更快地检索它。我认为这是一种混合。您的实现没有执行任何递归检查;您没有在集合中递归。另外,我会使用字符串API来避免比较字符串时出现问题together@jcruz,谢谢你的回复。我尝试了你的解决方案,但仍然没有结果。我还尝试了以下操作(xElement=>xElement.Value.ToString()),但仍然没有得到任何结果。让我的问题更清楚。我有以下项目(超过30万)。9879-9890-223-abc-test 9999-9893-111-234-444t执行Linq搜索后,我想检索整个Tag1,因为Tag1_1值与我正在搜索的值相同。@SuC将其添加到字典时,
xelementObj
的值是多少?这里:
dictionaryObj[“KeyName”].Add(xelementObj)