2010-03-21 6 views
1

linq 및 linq 엔티티에 새로운 해요 그래서 내 가정에 잘못되었을 수도 있지만 무의식적으로 L2E에서 DefaultIfEmpty 사용하려고했습니다.Defaultifempty 엔티티에 linq에서 작동하는 것 같다

결과 집합을 List로 바꾸면 Invalidlyly Linq 영역으로 건너 뛴다면 Defaultifempty()가 작동하지 않습니다. 아래의 코드가 작동합니다. 아무도 왜 그 이유를 말해 줄 수 있습니까? 그리고 그것이 잘 작동하면 다른 사람들에게 도움이 될 것입니다. 당신이 필터링없이 .ToList()를 호출하기 때문에

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

답변

2

이것은, 필요 이상으로 방법을 더 많은 데이터를 수집합니다. 이것은 당신이

대신이 고려 데이터베이스에서 모든 지역을 선택 의미

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 쿼리에 의해 반환 된 값을 선택, 그것이 null 또는 비어있는 경우, 그것은 선택 문자열/매개 변수로 전달 된 개체. 이 경우 "defaultpic.jpg". 그 첫 번째는 그저 하나의 요소로 구성되는 열거 형이 단일 인스턴스로 축소되었는지 확인하는 것입니다.

관련 문제