Me gustaría obtener registros de la base de datos usando Dynamic Linq Library NuGet . ¿Cómo puedo escribir una consulta para seleccionar registros principales junto con la lista de registros secundarios? Por ejemplo, existe una relación uno a muchos entre la tabla de preguntas y respuestas. QuestionID es una columna de clave externa en la tabla de respuestas.
Es muy simple si doy el nombre de la columna en la cláusula where cuando no voy a usar Dynamic Linq Library NuGet .
var LinQResult=db.Questions
.Include(f=>f.Answers).Where(f=>f.Email=="someEmail").ToList();
No tengo ninguna pregunta sobre la consulta anterior y simplemente puedo representar el contenido en vistas de afeitar o cualquier formulario web.
Si voy a usar Dynamic Linq Library NuGet , tengo un criterio de búsqueda en formato de cadena como el siguiente,
string SearchCreteria = "Email=\"SomeValue\"";
Al pasar los criterios de búsqueda dinámica anteriores en la cláusula where a continuación,
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);
¿Cómo puedo convertir / agregar el resultado anterior en una lista fuertemente tipada a continuación?
List<QuestionVM> questionVM=new List<QuestionVM> ();
public class QuestionVM
{
public Question Question { get; set; }
public List<Answer> Answers { get; set; }
}
Esto debería hacerlo, creo.
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)
});
}