使用LINQ进行选择

dsi*_*lva 3 c# linq

我有一个示例xml文件,如下所示:

<Books>
   <Category Genre="Fiction" BookName="book_name" BookPrice="book_price_in_$" />
   <Category Genre="Fiction" BookName="book_name" BookPrice="book_price_in_$" />
   <Category Genre="NonFiction" BookName="book_name" BookPrice="book_price_in_$" />
   <Category Genre="Children" BookName="book_name" BookPrice="book_price_in_$" />
</Books>  
Run Code Online (Sandbox Code Playgroud)

我需要收集所有的书籍名称和书价,并传递给其他方法.现在,我List<string>使用以下命令将所有书籍名称和书籍价格分别分为两个:

List<string>BookNameList = root.Elements("Category").Select(x => (string)x.Attribute("BookName")).ToList();
List<string>BookPriceList = root.Elements("Category").Select(x => (string)x.Attribute("BookPrice")).ToList();
Run Code Online (Sandbox Code Playgroud)

我创建了一个文本文件并将其发送回调用函数(在文本文件中输出这些结果是必需的,文本文件有两个字段bookname和bookprice).

要写入文本文件,请使用以下代码:

for(int i = 0; i < BookNameList.Count; i++)
{
   //write BookNameList[i] to file
   // Write BookPriceList[i] to file
}
Run Code Online (Sandbox Code Playgroud)

我对这种方法感觉不太好.假设由于任何原因两个列表的大小不同.现在我不考虑这一点,我觉得使用foreach效率更高(我可能错了).是否可以从LINQ中读取数据结构(具有两个属性名称和价格)的条目?然后我可以使用foreach轻松迭代该数据结构的列表.

我正在使用C#进行编程.

谢谢,

[编辑]:感谢大家的超快反应,我选择了第一个答案.

GWB*_*GWB 10

选择:

var books = root.Elements("Category").Select(x => new {
    Name = (string)x.Attribute("BookName"), 
    Price = (string)x.Attribute("BookPrice")
}).ToList();
Run Code Online (Sandbox Code Playgroud)

循环:

foreach (var book in books)
{
    // do something with
    // book.Name
    // book.Price
}
Run Code Online (Sandbox Code Playgroud)