[英]LINQ to XML query. Get element attribute
由於Cannot convert lambda expression to delegate type
因此無法獲取answer屬性。 這些是我的課程和查詢:
var file = XDocument.Load("QuestionsTest.xml");
var questions = from answers in file.Root.Elements("Question").Elements("Answers").Elements("Answer")
select new Answer
{
Text = (string)answers,
Correct = (string)answers.Elements("Answer").Single(answer=>(string)answer.Attribute("Correct"))
};
public class Answer
{
public int AnswerID { get; set; }
public string Text { get; set; }
public string Correct { get; set; }
public int Stats { get; set; }
public int QuestionID { get; set; }
}
public class Question
{
public virtual List<Answer> Answers { get; set; }
}
我的XML如下所示:
<?xml version="1.0" encoding="utf-8" ?>
<Questions Subject="ADO.NET">
<Question NumberOfAnswers="1">
<Text>Which class should you use to manage multiple tables and relationships among them?</Text>
<Answers>
<Answer>DataRow</Answer>
<Answer>DataView</Answer>
<Answer>DataTable</Answer>
<Answer Correct="Yes">DataSet</Answer>
</Answers>
</Question>
</Questions>
如何獲得答案的屬性?
Enumerable.Single
接受Func<T,bool>
委托,該委托應返回布爾值。 您正在傳遞返回XAttribute
值的委托。 您應該將屬性值與Yes
字符串進行比較 ,以返回布爾結果:
Single(answer => (string)answer.Attribute("Correct") == "Yes")
這將解決您的錯誤。 但我認為您也應該更改查詢的邏輯。 首先更改Answer
類,然后將Correct
屬性設置為布爾值:
public class Answer
{
public int AnswerID { get; set; }
public string Text { get; set; }
public bool IsCorrect { get; set; }
public int Stats { get; set; }
public int QuestionID { get; set; }
}
查詢應如下所示:
var xdoc = XDocument.Load("QuestionsTest.xml");
var questions =
from q in xdoc.Descendants("Question")
select new Question {
Answers = (from a in q.Descendants("Answer")
select new Answer {
Text = (string)a,
IsCorrect = (string)a.Attribute("Correct") == "Yes"
}).ToList()
};
var questions = from answers in
file.Root.Elements("Question").Elements("Answers").Elements("Answer")
select new Answer
{
Text = (string)answers,
Correct = (string)answers.Attribute("Correct")
};
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.