列出与列表B

时间:2015-05-12 19:42:13

标签: c# linq

人们,请原谅我在一天内两次询问名单。我比较了两个名单,需要一个布尔回来 - 他们匹配与否?我有列表B我将其与List A中的单个值进行比较。我尝试过几种组合但没有运气。

这里有一些代码可以解决您的问题:

 @for (int i = 0; i < @Model.QuizQuestions.Count(); i++)
    {
 for (int j = 0; j < Model.QuizQuestions.ElementAt(i).QuizAnswers.Count(); j++)
        {


            if (Model.QuizHeader.QuizQuestions.Any(item => item.QuizAnswers.Any(x =>x.AnswerID == Model.QuizQuestions.ElementAt(i).QuizAnswers.ElementAt(j).AnswerID)))
            {
                   //Do something here
            }

            else
            {
                //Do something else
            }


        }

我错过了什么明显的事情?谢谢!

视图模型:

public class QuizIndScoreReportObject
{
    [NotMapped]
    public virtual TopicList Topic { get; set; }

    [NotMapped]
    public virtual QuizHeader QuizHeader { get; set; }

    [NotMapped]
    public virtual List<QuizQuestions> QuizQuestions { get; set; }

    [NotMapped]
    public virtual List<QuizAnswers> QuizAnswer { get; set; }
}

注意QuizAnswers是QuizQuestions的一个属性。 QuizQuestions是QuizHeader的属性。我在这个配置下传递了两个列表,所以我为那里缺乏清晰度而道歉。

2 个答案:

答案 0 :(得分:2)

感谢大家的帮助。我能够修改我的代码,以便通过一些修补来完成我需要的工作。这是通过中间变量开始工作的原因。

                var value = Model.QuizQuestions.ElementAt(i).QuizAnswers.ElementAt(j).AnswerID;
            if ( Model.QuizHeader.QuizQuestions.Any(item => item.QuizAnswers.Any( x=> x.AnswerID == value)))

答案 1 :(得分:1)

我知道这是对事物的一种简单看法,但你是否尝试了相交和Linq库中内置的函数?

int[] seq1 = { 1, 2, 3 }, seq2 = { 3, 4, 5 };

seq1.Intersect (seq2).Dump ("Intersect");
seq1.Except    (seq2).Dump ("seq1.Except (seq2)");
seq2.Except    (seq1).Dump ("seq2.Except (seq1)");

结果如下:

  • Intersect =(IEnumerable)3;
  • Seq1 =(IEnumerable){1,2};
  • Seq2 =(IEnumerable){4,5};

您可以使用QuizQuestions执行此类操作吗?您在每个类中寻找的ID是唯一的,或者列表A中的Id 1是否与列表B中的Id 2相匹配?我不清楚QuizQuestion类的结构,所以我不确定如何进一步帮助你。