C# 按一个引用对象筛选一长串对象

C# 按一个引用对象筛选一长串对象,c#,linq,C#,Linq,a)一长串已完成的调查,其中已完成的调查只不过是一个以 问题是 列出你的答案 和b)一次筛选调查,其中一些答案已预先选定(例如“女性”、“吸烟者”),我如何获得完全符合筛选调查中定义标准的已完成调查子集 编辑: 这些是相关的类别: public class Answer { public int Id { get; set; } public Question Question { get; set; } public List<AnswerPossibilit

a)一长串已完成的调查,其中已完成的调查只不过是一个以

  • 问题是
  • 列出你的答案
b)一次筛选调查,其中一些答案已预先选定(例如“女性”、“吸烟者”),我如何获得完全符合筛选调查中定义标准的已完成调查子集

编辑: 这些是相关的类别:

public class Answer
{
    public int Id { get; set; }
    public Question Question { get; set; }
    public List<AnswerPossibility> SelectedAnswers { get; set; }
}

public class Survey
{
    public int Id { get; set; }
    public string Title { get; set; }
    public List<Question> Questions { get; set; }
}

public class CompletedSurvey
{
    public int Id { get; set; }
    public Survey Survey { get; set; }
    public List<Answer> Answers { get; set; }
}

public class Subset
{
    // used to define a filter criteria
    public int Id { get; set; }
    public Survey Survey { get; set; }
    public List<Answer> Answers { get; set; }
    public string Title { get; set; }
}

public class Question
{
    public int Id { get; set; }
    public string Text { get; set; }
    public QuestionType QuestionType { get; set; }
    public List<AnswerPossibility> AnswerPossibilities { get; set; }
}
公共类答案
{
公共int Id{get;set;}
公共问题{get;set;}
选择的公用列表答案{get;set;}
}
公营班级调查
{
公共int Id{get;set;}
公共字符串标题{get;set;}
公共列表问题{get;set;}
}
公共课综合调查
{
公共int Id{get;set;}
公共调查{get;set;}
公共列表答案{get;set;}
}
公共类子集
{
//用于定义筛选条件
公共int Id{get;set;}
公共调查{get;set;}
公共列表答案{get;set;}
公共字符串标题{get;set;}
}
公开课问题
{
公共int Id{get;set;}
公共字符串文本{get;set;}
公共问题类型问题类型{get;set;}
公共列表应答可能性{get;set;}
}
到目前为止,我还没有找到可编译的东西:o(


哦,老兄,约翰·斯基特否决了我的问题。就这样,我已经完成了编程…(只是开玩笑,我刚刚开始…)

  • CompletedSurvey键
    ,它描述了您提到的“筛选调查”
  • IEnumerable answers
    ,描述人们的实际答案
然后你可以做这样的事情

return answers.Select(survey => survey.Answers.Join(key.Answers,
                                                    a => a.Question.Id,
                                                    b => b.Question.Id,
                                                    (a, b) => new {
                                                                      answer = a,
                                                                      expected = b
                                                                  }))
              .Where(c => c.All(x => x.expected.SelectedAnswers
                                               .GroupJoin(x.answer.SelectedAnswers,
                                                          a => a.Id,
                                                          b => b.Id,
                                                          (a, b) => b.Any())));
这是完全未经测试的,我写在这里的答案框,所以它可能不正确。你也可以清理这个。但它应该让你开始


这样做的目的是获取已完成的调查,这些调查的答案与键中列出的答案一致(通过联接),然后仅获取那些具有键中所有选定答案的调查(通过组联接)。这是一种非常复杂的方法,我怀疑有更好的方法,但这是我从您给我们的内容中得出的结论。

分享您迄今为止的尝试。最好向我们展示一些代码,特别是描述调查的类等。