Динамическая библиотека Linq не может обрабатывать отношения «один ко многим» в предложении select

Я хочу получить записи из базы данных с помощью динамической библиотеки Linq NuGet . Как я могу написать запрос для выбора родительских записей вместе со списком дочерних записей. Например, существует связь «один ко многим» между таблицей вопросов и ответов. QuestionID — это столбец внешнего ключа в таблице ответов.

Это очень просто, если я укажу имя столбца в предложении where, когда я не собираюсь использовать библиотеку Dynamic Linq NuGet.

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

У меня нет вопросов по вышеуказанному запросу, и я могу просто отображать содержимое в представлениях бритвы или любых веб-формах.

Если я собираюсь использовать библиотеку 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);

Как я могу преобразовать/добавить приведенный выше результат в строго типизированный список ниже

List<QuestionVM> questionVM=new List<QuestionVM> ();
public class QuestionVM
        {
            public Question Question { get; set; }
            public List<Answer> Answers { get; set; }
        }

person sridharnetha    schedule 25.04.2015    source источник


Ответы (1)


Это должно сделать это, я думаю.

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)
   });
}
person Edwin van Vliet    schedule 25.04.2015
comment
Я получаю q.Answers как ноль, даже если у меня есть данные в строке Answers=q.Answers.Where(q.Answer!=null). - person sridharnetha; 25.04.2015
comment
Если вы поставите точку останова после оператора queryBuilder, будут ли у него какие-либо ответы? - person Edwin van Vliet; 25.04.2015