动态Linq库无法处理select子句中的一对多关系

时间:2015-04-25 10:33:35

标签: asp.net linq dynamic-linq linq-expressions predicatebuilder

我想使用Dynamic Linq Library NuGet从数据库中获取记录。如何为选择的父记录和子记录列表编写查询。例如,问题和答案表之间存在一对多关系。 QuestionID是Answers表中的外键列。

当我不打算使用Dynamic Linq Library NuGet时,如果我在where子句中给出列名,这非常简单。

var LinQResult=db.Questions
            .Include(f=>f.Answers).Where(f=>f.Email=="someEmail").ToList();

我对上述查询毫无疑问,我可以简单地在剃刀视图或任何网络表单上呈现内容。

如果我要使用动态Linq库NuGet,我有一个字符串格式的搜索条件,如下所示,

string SearchCreteria = "Email=\"SomeValue\"";

在以下where子句中传递上述动态搜索条件,

var QueryBuilder = (from q in db.Questions
                    join a in db.Answers on q.QuestionID equals a.QuestionID into answer
                    from a in answer.DefaultIfEmpty()                                
                    select new { q,a}).Distinct().AsQueryable();

var Result = QueryBuilder.Where(SearchCreteria);

如何将上述结果转换/添加到

下面的强类型列表中
List<QuestionVM> questionVM=new List<QuestionVM> ();
public class QuestionVM
        {
            public Question Question { get; set; }
            public List<Answer> Answers { get; set; }
        }

1 个答案:

答案 0 :(得分:0)

我认为应该这样做。

var queryBuilder = (from q in db.Questions.Include(itm  => itm.Answers)
join a in db.Answers on q.QuestionID equals a.QuestionID
where a.Email.equals(SearchCriteria)
select q).Distinct().ToList();

var questionVM = new List<QuestionVM>();
foreach(var q in queryBuilder)
{
   questionVM.add(new QuestionVM
   {
      Question = q,
      Answers = q.Answers.Where(itm => itm != null).Select(itm => itm.QuestionID == q.ID)
   });
}