C# Linq根据对象属性从列表中选择对象
我有一张物品清单C# Linq根据对象属性从列表中选择对象,c#,linq,C#,Linq,我有一张物品清单 class Answer { bool correct; } List<Answer> Answers = new List<Answer>(); 但是它不起作用首先,如果有多个元素满足条件,则抛出异常。其次,您的标准应该只检查Correct属性是否为true。现在,您正在检查a是否等于a.Correct(它甚至不会编译) 您应该使用(如果没有这样的元素,它将抛出),或者(如果没有这样的元素,它将为引用类型返回null): 如果a.Correc
class Answer
{
bool correct;
}
List<Answer> Answers = new List<Answer>();
但是它不起作用首先,如果有多个元素满足条件,则抛出异常。其次,您的标准应该只检查Correct
属性是否为true
。现在,您正在检查a
是否等于a.Correct
(它甚至不会编译)
您应该使用(如果没有这样的元素,它将抛出),或者(如果没有这样的元素,它将为引用类型返回null
):
如果
a.Correct
是正确答案的bool
标志,则需要
Answer answer = Answers.Single(a => a.Correct);
我想您会因为以下原因而出现异常。您的列表中可能有多个答案标记为正确,这就是为什么
Single
将抛出异常使用,或者
此外,如果您想获得标记为正确的所有项目的列表,您可以尝试:
List<Answer> correctedAnswers = Answers.Where(a => a.Correct).ToList();
这句话是错的。
您的单个查询应该是:
Answer answer = Answers.Single(a => a.Correct == true);
或简称:
Answer answer = Answers.Single(a => a.Correct);
我想你在找这个
var correctAnswer = Answers.First(a => a.Correct);
您可以通过键入以下内容使用single:
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.正确,我猜是一个布尔值
长格式:-
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);
这将通过电子邮件选择每个唯一的对象谢谢!!!单一的方法正是我几天来一直在寻找的!!
var answers = Answers.Where(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());