Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Linq根据对象属性从列表中选择对象_C#_Linq - Fatal编程技术网

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());