如何使用lambda表达式选择列名?

时间:2015-08-12 05:09:26

标签: c# asp.net linq-to-xml

我是lambda表达式的新手。

我有这个xml

<Booksshel>
   <BookN>
       <column>author</column>
       <column>Price</column>
       <column>Date</column>
   </BookN>
   <BookDetails id=1>
       <author>john</author>
       <price>50</price>
   </BookDetails>
   <BookDetails id=2>
       <author>kalam</author>
       <price>90</price>
   </BookDetails>
   <BookDetails id=3>
       <author>sachin</author>
       <price>70</price>
       <Date>12-08-2015</Date>
   </BookDetails>
</Booksshel>

在上面的XML中,我在列表中有列名,作者,价格&#39;我需要使用lambda表达式选择特定的BookDetails

foreach (var col in columnName)
{
    sl.AddRange(_doc.Descendants("BookDetails")
          .Where(p =>Id.Contains(p.Element("BookDetails").Value))
          .Select(p=> New { p.Element(col).Value }).ToList())
}

这引发了一些奇怪的问题。我怎样才能获得详细信息?

1 个答案:

答案 0 :(得分:1)

由于您提到“需要使用lambda表达式选择特定的BookDetails”,您可以选择特定书籍的书籍详细信息:

var result = _doc.Descendants("BookDetails")
                 .Where(x => x.Attribute("id").Value == "1")
                 .Select(b => new { Author = b.Element("author").Value, Price = b.Element("price").Value });

你可以像这样循环结果

foreach (var book1 in result)
{
    Console.WriteLine($"{book1.Author}\t\t{book1.Price}");
}

或者由于您要删除一个结果,您可以获得如下项目:

var book2 = result.FirstOrDefault();
if (book2 != null)
{
    Console.WriteLine($"{book2.Author}\t\t{book2.Price}");
}