C# 使用Linq从包含XElement列表的Dictionary对象(<;string,List<;XElement>;)检索XElement
我有一个Dictionary对象,它有一个键和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))
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)代码>