DefaultIfEmpty parece funcionar en LINQ a las entidades
-
21-09-2019 - |
Pregunta
Soy nuevo en LINQ y LINQ a las entidades por lo que podría haber ido mal en mis suposiciones, pero he estado sin saberlo, tratando de utilizar DefaultIfEmpty en L2E.
Por alguna razón, si a su vez el conjunto de resultados en una lista, el DefaultIfEmpty () funciona No sé si me he cruzado inadvertidamente encima en el área de LINQ. El siguiente código funciona, puede alguien decirme por qué? Y si lo hace un gran trabajo, entonces va a ser de ayuda para otras personas.
var results = (from u in rv.tbl_user
.Include("tbl_pics")
.Include("tbl_area")
.Include("tbl_province")
.ToList()
where u.tbl_province.idtbl_Province == prov
select new { u.firstName, u.cellNumber,
u.tbl_area.Area, u.ID,u.tbl_province.Province_desc,
pic = (from p3 in u.tbl_pics
where p3.tbl_user.ID == u.ID
select p3.pic_path).DefaultIfEmpty("defaultpic.jpg").First())
}
).ToList();
Solución
Esta recoge más datos de los necesarios, debido a que llame .ToList()
sin filtrar. Esto significa selecciona todos provincias de la base de datos
En vez considere esto:
var results = (from u in rv.tbl_user
where u.tbl_province.idtbl_Province == prov
select new {
u.firstName,
u.cellNumber,
u.tbl_area.Area,
u.ID,
u.tbl_province.Province_desc,
pic = (from p3 in u.tbl_pics
where p3.tbl_user.ID == u.ID
select p3.pic_path).DefaultIfEmpty("defaultpic.jpg").First()
}).ToList();
Para responder a su pregunta, .DefaultIfEmpty
selecciona el valor devuelto por la consulta, y si es nulo o vacío, se selecciona la cadena / objeto pasado como parámetro. "defaultpic.jpg"
en este caso. El .First después de eso es sólo para asegurarse de la enumeración (que probablemente siempre consistir en un solo elemento) se desplomó en una sola instancia.