我有一个对象列表
class Answer
{
bool correct;
}
List<Answer> Answers = new List<Answer>();
Run Code Online (Sandbox Code Playgroud)
在linq中是否有办法根据其属性选择对象?
到目前为止我有
Answer answer = Answers.Single(a => a == a.Correct);
Run Code Online (Sandbox Code Playgroud)
但它不起作用
Gro*_*roo 48
首先,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();
Run Code Online (Sandbox Code Playgroud)
Hab*_*bib 12
我假设你因为单身而得到例外.您的列表可能有多个标记为正确的答案,这就是为什么Single抛出异常使用First或FirstOrDefault() ;
Answer answer = Answers.FirstOrDefault(a => a.Correct);
Run Code Online (Sandbox Code Playgroud)
此外,如果您想获得标记为正确的所有项目的列表,您可以尝试:
List<Answer> correctedAnswers = Answers.Where(a => a.Correct).ToList();
Run Code Online (Sandbox Code Playgroud)
如果您需要的结果是Single,那么您在查询中所犯的错误就是将项目与bool值进行比较.你的比较
a == a.Correct
Run Code Online (Sandbox Code Playgroud)
声明中的错误.您的单个查询应该是:
Answer answer = Answers.Single(a => a.Correct == true);
Run Code Online (Sandbox Code Playgroud)
或者很快:
Answer answer = Answers.Single(a => a.Correct);
Run Code Online (Sandbox Code Playgroud)
你的表达永远不会评估。
您正在a与 的属性进行比较a。
a是类型答案。 a.Correct,我猜是一个布尔值。
长表:-
Answer = answer.SingleOrDefault(a => a.Correct == true);
Run Code Online (Sandbox Code Playgroud)
简写:-
Answer = answer.SingleOrDefault(a => a.Correct);
Run Code Online (Sandbox Code Playgroud)