class Answer
{
bool correct;
}
List<Answer> Answers = new List<Answer>();
的名單是否有LINQ我的方式來選擇取決於其屬性的對象?
到目前爲止,我有
Answer answer = Answers.Single(a => a == a.Correct);
但它不工作
class Answer
{
bool correct;
}
List<Answer> Answers = new List<Answer>();
的名單是否有LINQ我的方式來選擇取決於其屬性的對象?
到目前爲止,我有
Answer answer = Answers.Single(a => a == a.Correct);
但它不工作
首先,Single
拋出一個異常,如果有不止一個滿足條件的元素。其次,您的標準只應檢查Correct
屬性是否爲true
。現在,你正在檢查是否a
等於a.Correct
(它甚至不會編譯)。
應使用First
(如果不存在這樣的元件,其將拋出),或FirstOrDefault
(將返回null
用於參考類型,如果沒有這樣的元素):
// this will return the first correct answer,
// or throw an exception if there are no correct answers
var correct = answers.First(a => a.Correct);
// this will return the first correct answer,
// or null if there are no correct answers
var correct = answers.FirstOrDefault(a => a.Correct);
// this will return a list containing all answers which are correct,
// or an empty list if there are no correct answers
var allCorrect = answers.Where(a => a.Correct).ToList();
如果a.Correct
是一個bool
標誌爲正確的答案,然後你需要。
Answer answer = Answers.Single(a => a.Correct);
我假設您因爲Single而收到異常。您的列表可能有多個標記爲正確的答案,這就是爲什麼Single
會拋出異常使用First或FirstOrDefault();
Answer answer = Answers.FirstOrDefault(a => a.Correct);
此外,如果你想獲得的所有項目的列表標記爲正確的,你可以嘗試:
List<Answer> correctedAnswers = Answers.Where(a => a.Correct).ToList();
如果你期望的結果是Single
,那麼你在查詢中正在做的錯誤是比較的具有bool值的項目。您的比較
a == a.Correct
在聲明中是錯誤的。 你的單號查詢應該是:
Answer answer = Answers.Single(a => a.Correct == true);
或簡稱爲:
Answer answer = Answers.Single(a => a.Correct);
我認爲你是在找這個?
var correctAnswer = Answers.First(a => a.Correct);
您可以通過鍵入使用單:
var correctAnswer = Answers.Single(a => a.Correct);
當然!
使用FirstOrDefault()
選擇哪個條件一致的第一個對象:
Answer answer = Answers.FirstOrDefault(a => a.Correct);
否則使用Where()
選擇列表的一個子集:
var answers = Answers.Where(a => a.Correct);
你的表情是永遠不會來評價。
您正在比較a
和a
的物業。
a
是答案類型。 a.Correct
,我猜是布爾值。
朗形式: -
Answer = answer.SingleOrDefault(a => a.Correct == true);
縮寫: -
Answer = answer.SingleOrDefault(a => a.Correct);
幾件事情要解決這裏:
您的代碼將是這個樣子
List<Answer> answers = new List<Answer>();
/* test
answers.Add(new Answer() { correct = false });
answers.Add(new Answer() { correct = true });
answers.Add(new Answer() { correct = false });
*/
Answer answer = answers.Single(a => a.correct == true);
和類
class Answer
{
public bool correct;
}
Answers = Answers.GroupBy(a => a.id).Select(x => x.First());
這將通過電子郵件選擇每個唯一的對象
感謝您的解釋 –