2013-08-22 2 views
1

배열의 바닥 글 목록을 반환하여 모든 관련 데이터를 반환하는 Contains 호출을 수행 할 수 있도록 linq 호출이 필요합니다.배열 만들기 다음에 기초하여 선택

linq에서 층 배열을 반환 할 수 없습니다.

var myFloors = 
(from f in db.Floor 
where f.BuildingId == txBuildingId 
select new { f.FloorId }).ToArray(); 

그런 다음 해당 배열을 기반으로 선택하는 데 문제가 있습니다.

var model = 
(from r in db.Room 
where myFloors.Contains(r.FloorId) 
select new 
{ 
    label = r.Name, 
    value = r.RoomId 
}); 

문자열과 IN 절을 사용하여 SQL에서 쉽게 수행 할 수 있습니다. 나는 LINQ에 상당히 익숙하며 이것으로 많은 어려움을 겪고있다. 어떤 도움이라도 대단히 감사 할 것입니다.

답변

3

여기에 익명의 유형이 필요가 없습니다, 당신이 직접 floorId를 선택할 수 있습니다 더 읽기에 대한

var myFloors = 
(from f in db.Floor 
where f.BuildingId == txBuildingId 
select f.FloorId); 

를, 내가 사용하여 선호 람다 스타일 : 그래서

var myFloors = db.Floor.Where(f => f.BuildingId == txBuildingId) 
         .Select(f => f.FloorId); 

:

var model = db.Room.Where(r => myFloors.Contains(r.FloorId)) 
        .Select(r => new { 
         label = r.Name, 
         value = r.RoomId  
        }); 
+0

그는 배열을 요청 했으므로 문장의 끝에 .ToArray()를 추가 할 수 있습니다. – IllusiveBrian

+0

@ Namfuak : 두 번째 쿼리에서 사용하는 purpore를 사용하면 끝에 ToArray를 사용할 필요가 없습니다. –

+0

앞으로 내가해야하는 다른 작업에 유용하게 사용할 수 있으므로이 점을 이해하고 싶었습니다. 하지만 그렇습니다. 도와 주셔서 감사합니다. –

1

Floor 참조가 Room에 정의 된 경우 병합 할 수 있습니다 2 Linq 질의는 성능면에서보다 효율적입니다.

db.Room.Where(x=>x.Floor.BuildingId == txBuildingId).Select(r => new { 
    label = r.Name, 
    value = r.RoomId 
})