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(); 
¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top