Linq方法检查一个集合的属性与另一个集合属性

本文关键字:属性 集合 另一个 一个 检查 方法 Linq | 更新日期: 2023-09-27 18:26:03

因此,我需要根据数据库中的正确答案来检查问题的答案。

Obj1.Answer == Obj2.CorrectAnswer

我知道我可以做这样的事情:

List<SimpleQuestion> listOfQ = {from user}
List<Question> testQuestions = {from db}
List<Question> correctAnswers = new List<Question>();
for (int i = 0; i < listOfQ.Count(); i++)
{
   var item = testQuestions.Where(t => t.QuestionId.ToString() == listOfQ[i].QuestionId).FirstOrDefault();
   if (item != null)
   {
     if (listOfQ[i].Answer == item.CorrectAnswer.ToString())
     {
        correctAnswers.Add(item);
     }
   }               
}

但是有没有办法在一个linq语句中做到这一点,其中Obj1.Answer==Obj2.CorrectAnswer返回匹配的对象列表?这个代码对我来说很好用,我只是想知道是否有linq方法可以做到这一点——如果有,我似乎无法弄清楚。

Linq方法检查一个集合的属性与另一个集合属性

我想你的答案在这里:

currectAnswers.AddRange(testQuestions.Where(
t=>listOfQ.Any(l=>l.QuestionId==t.QuestionId && 
l.Answer==t.CorrectAnswer))
correctAnswers=listOfQ.Join(testQuestions,
  a=>new {a.QuestionId,a.Answer},
  b=>new {b.QuestionId.ToString(),b.CorrectAnswer.ToString()},
  (a,b)=>b);

我们的模型类:

public class Question
    {
        public int Iduser;
        public int IdQuestion;
        public string Answer;
        public Question(int iduser,int idquestion,string answer)
        {
            this.Iduser = iduser;
            this.IdQuestion = idquestion;
            this.Answer = answer;
        }
    }
public class SimpleQuestion
{
    public int IdQuestion;
    public string Answer;
    public SimpleQuestion(int idquestion, string answer)
    {
        this.IdQuestion = idquestion;
        this.Answer = answer;
    }
}

Main:

List<SimpleQuestion> listOfQ = new List<SimpleQuestion>();
            listOfQ.Add(new SimpleQuestion(1, "1"));
            listOfQ.Add(new SimpleQuestion(2, "2"));
            listOfQ.Add(new SimpleQuestion(3, "3"));
            List<Question> testQuestions = new List<Question>();
            testQuestions.Add( new Question(1,1,"1"));
            testQuestions.Add( new Question(2,2,"2"));
            testQuestions.Add( new Question(3,3,"1"));

            List<Question> list = (from q in listOfQ
                                   join a in testQuestions on q.IdQuestion equals a.IdQuestion
                                   where a.Answer == q.Answer
                                   select a
                                      ).ToList();