我想使用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)
});
}