Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何基于多个xml属性存储和查找数据?_C#_Linq_List_Lookup - Fatal编程技术网

C# 如何基于多个xml属性存储和查找数据?

C# 如何基于多个xml属性存储和查找数据?,c#,linq,list,lookup,C#,Linq,List,Lookup,我正在查询一个xml文件,每个选择返回3个属性。符合我的条件的每个条目将返回3个属性详细信息。我需要存储这些值,然后稍后查找第一个属性,并返回与之相关的另外两个存储的属性 var items = from item in doc.Descendants("SUM") select new {

我正在查询一个xml文件,每个选择返回3个属性。符合我的条件的每个条目将返回3个属性详细信息。我需要存储这些值,然后稍后查找第一个属性,并返回与之相关的另外两个存储的属性

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中 { //为每一项做些事情 }