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

本文关键字:选择 表达式 何使用 lambda | 更新日期: 2023-09-27 18:07:21

我对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中,列表'author, price'中有列名,我需要使用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())
}

这引起了一些奇怪的问题。我怎样才能知道详情?

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

既然您提到"需要使用lambda表达式选择特定的BookDetails",那么您可以像这样选择特定书籍的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}");
}
var tableColumns = (from t in typeof(TableModel).GetProperties()
                          select t.Name).ToList();
 
foreach (var column in tableColumns)
{
    var col = _context.Table.Select(s =>  s.GetType().GetProperty(column).GetValue(s)).ToArray();
}