Кажется, что defaultifempty работает в linq для сущностей - PullRequest
1 голос
/ 21 марта 2010

Я новичок в 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(); 

1 Ответ

2 голосов
/ 21 марта 2010

При этом получает больше данных, чем необходимо, потому что вы звоните .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" в этом случае.После этого необходимо просто убедиться, что перечисление (которое, вероятно, всегда будет состоять только из одного элемента) сворачивается в один экземпляр.

...