我想使用Dynamic Linq Library NuGet从数据库中获取记录。如何编写查询以选择父记录以及子记录列表。例如,问题和答案表之间存在一对多关系。 QuestionID是Answers表中的Foreign Key列。
如果我不打算使用Dynamic Linq Library NuGet时在where子句中提供列名,这将非常简单。
var LinQResult=db.Questions
.Include(f=>f.Answers).Where(f=>f.Email=="someEmail").ToList();
我对上面的查询没有任何疑问,我可以简单地在剃刀视图或任何Web表单上呈现内容。
如果我要使用Dynamic 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);
如何将Result上面的结果转换/添加到下面的强类型列表中
List<QuestionVM> questionVM=new List<QuestionVM> ();
public class QuestionVM
{
public Question Question { get; set; }
public List<Answer> Answers { get; set; }
}
我认为应该这样做。
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)
});
}