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方法可以做到这一点——如果有,我似乎无法弄清楚。
我想你的答案在这里:
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();