2012-10-04 2 views
0

내가 여기 몇 가지 질문을 읽을 수는 있지만 모두가 별도의 변수로 정의 할 수 있지만, 나는 나의 조금 다른 생각 '(선택 System.String) 내용을 선택 System.String'를 인식하지 못하는LINQ는 방법

var sliderRecordList = this._sliderService.GetAllAsQueryable();  
    var sliderModelList = sliderRecordList.Select(record => new SliderModel() 
     { 
     Id = record.Id, 
     SlideName = record.SlideName, 
     SlideOrder = record.SlideOrder, 
     SlideUrl = record.SlideUrl, 
     SlideImageUrl = Url.Content("~/Content/AhsenSliderImages/" + record.Id + ".jpg"), 
     Enabled = record.Enabled 
    }); 

이 문제는 Url.Content() 메서드가 호출 된 위치에 의존합니다. 어떠한 제안? 나는 Url.Content() 메서드를 제거하려고 시도했지만 작동하지 않았습니다.

답변

2

먼저 검색어를 분석 한 다음 UI 문제를 설정하십시오.

var sliderRecordList = this._sliderService.GetAllAsQueryable().ToList(); 
var sliderModelList = sliderRecordList 
    .Select(record => new SliderModel 
     { 
     Id = record.Id, 
     SlideName = record.SlideName, 
     SlideOrder = record.SlideOrder, 
     SlideUrl = record.SlideUrl, 
     SlideImageUrl = Url.Content("~/Content/AhsenSliderImages/" + record.Id + ".jpg"), 
     Enabled = record.Enabled 
    }); 

.ToList() 먼저 쿼리를 실행합니다.

는 보조 노트에, 선 단지 몇으로 위의 코드를 설정하는 AutoMapper을 사용하는 것이 좋습니다 :

var sliderRecordList = this._sliderService.GetAllAsQueryable().ToList(); 
var sliderModelList = Mapper.Map<ICollection<SliderRecord>, ICollection<SliderModel>>(sliderRecordList); 

URL 생성이보기에서 수행 할 수 있습니다.

+0

글쎄, 그건 내가 피하고 있었지만 다른 기회가없는 것 같다! – Tarik

+0

@DorianGray - Entity Framework는 쿼리를 구체화하기 위해 "상수"를 만들어야합니다. 왜 이것을 시도하고 피하겠습니까? 당신이 어쨌든 질의를 필터링하지 않기 때문에 당신이 우선 순위를 매기면 아무런 차이가 없습니다. – RPM1984

+0

'sliderModelList'를 다른 메서드에 전달하고 어떤 메서드가'IQueryable <> '을 사용하는지에 따라 메서드 내부에서 필터링을 적용하여 사용하기 전에 필터링 할 수 있도록하고 최소한의 데이터 양을 가져옵니다. – Tarik

1

이것은 Url.Content 함수가 해당하는 SQL 함수로 변환 할 수 없기 때문입니다. 목록에 AsEnumerable 기능을 사용하여 시도에게 그것을

var sliderModelList = sliderRecordList.AsEnumerable.Select(record => new SliderModel() 
     { 
     Id = record.Id, 
     SlideName = record.SlideName, 
     SlideOrder = record.SlideOrder, 
     SlideUrl = record.SlideUrl, 
     SlideImageUrl = Url.Content("~/Content/AhsenSliderImages/" + record.Id + ".jpg"), 
     Enabled = record.Enabled 
    }); 

행운을 제공합니다.