Вопрос

Я новичок в linq и linq для сущностей, поэтому, возможно, я ошибся в своих предположениях, но я неосознанно пытался использовать DefaultIfEmpty в L2E.

По какой-то причине, если я превращу набор результатов в список, Defaultifempty() сработает. Я не знаю, не перешел ли я случайно в область Linq.Код ниже работает, может кто-нибудь сказать мне, почему?И если это действительно сработает, то это поможет другим людям.

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(); 
Это было полезно?

Решение

Это собирает способ больше данных, чем необходимо, потому что вы звоните .ToList() без фильтрации.Это означает, что вы выбираете все провинции из базы данных

Вместо этого рассмотрите следующее:

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();

Чтобы ответить на ваш вопрос, .DefaultIfEmpty выбирает значение, возвращаемое запросом, и, если оно равно нулю или пусто, выбирает строку/объект, переданную в качестве параметра. "defaultpic.jpg" в этом случае..First после этого предназначен для того, чтобы убедиться, что перечисление (которое, вероятно, всегда будет состоять только из одного элемента) свернуто в один экземпляр.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top