C# 如何基于多个xml属性存储和查找数据?
我正在查询一个xml文件,每个选择返回3个属性。符合我的条件的每个条目将返回3个属性详细信息。我需要存储这些值,然后稍后查找第一个属性,并返回与之相关的另外两个存储的属性C# 如何基于多个xml属性存储和查找数据?,c#,linq,list,lookup,C#,Linq,List,Lookup,我正在查询一个xml文件,每个选择返回3个属性。符合我的条件的每个条目将返回3个属性详细信息。我需要存储这些值,然后稍后查找第一个属性,并返回与之相关的另外两个存储的属性 var items = from item in doc.Descendants("SUM") select new {
var items = from item in doc.Descendants("SUM")
select new
{
id = (string)item.Attribute("id"),
category = (string)item.Attribute("cat"),
selection = (string)item.Attribute("sel")
};
上述代码为找到的每个项返回3个属性。我需要存储这3个条目,以便将它们关联在一起,然后对存储的条目执行查找。例如,我需要能够查找id=1的存储值,并返回相应的类别和选择项
我正在研究C的查找方法,但不知道如何使用它。列表似乎可以工作,但我不知道如何将多个数据段存储到列表中的一个条目中,或者连接到一个条目中,但我不确定是否要对其执行查找。对于如何使用列表、查找或其他未提及的方式进行此操作的任何建议,我们将不胜感激。您可以使用或使用其他选项,例如,etcto来进一步过滤:
var items = from item in doc.Descendants("SUM")
select new
{
Id = (string)item.Attribute("id"),
Category = (string)item.Attribute("cat"),
Selection = (string)item.Attribute("sel")
};
var filtered = items.Where(i => i.Id == 1);
// Then use these as needed
foreach(var item in filtered)
{
Console.WriteLine("Cat: {0}, Sel: {1}", item.Category, item.Selection);
}
托卢库普方法实际上有着完全不同的用途。它构建了一个实现的数据结构,这是一个查找表,您可以在其中轻松返回与特定键匹配的所有项。如果要从数据中执行许多查找,但如果只想查找与单个值匹配的项,则此选项非常有用。第一步是创建一个类来存储数据:
public class Item // come up with a better name...
{
public string ID {get; set;}
public string Catagory {get; set;}
public string Selection {get; set;}
}
其次,如果您的查找始终是按ID进行的,则可以将集合存储在字典中,并使用indexer属性进行查找:
// add
var dict = (from item in doc.Descendants("SUM")
select new Item
{
ID = (string)item.Attribute("id"),
Category = (string)item.Attribute("cat"),
Selection = (string)item.Attribute("sel")
})
.ToDictionary(i=>i.ID, i=>i);
// lookup
Item foundItem = dict[lookupID];
如果您的查找需要更通用,则只需将它们存储在列表中,并使用Linq和lambda函数进行查找:
List<Item> myList = new List<Item>();
// add items
List.Add(item);
// lookup one
Item item = myList.Single(i => i.ID == lookupID);
// lookup many
var items = myList.Where(i => i.Category == lookupCategory);
那么,您可能希望选择一个真正的类型: 公共类项目 { 公共字符串id{get;set;} 公共字符串类别{get;set;} 公共字符串选择{get;set;} }; 然后你可以做一些事情,比如 IEnumberable items=来自doc.genderantssum中的项目 选择新的 { id=stringitem.Attributeid, 类别=stringitem.Attributecat, selection=stringitem.Attributesel }; Item itemIWant=items.Whereitem=>Item.id==someIdNumber .FirstOrDefault; 如果itemIWant!=无效的 { //使用itemIWant.category和itemIWant.selection执行操作 } 或者如果有多个匹配项 IEnumberable itemsICareAbout= items.Whereitem=>item.id==someIdNumber'; foreachItem项目在itemsICareAbout中 { //为每一项做些事情 }