2017-02-03 1 views
1

안녕 모두 나는 사용자가 게시물을 제출하고 내가 오름차순으로 목록에 ORDERBY 사용하려고 수있는 응용 프로그램을 구축하고 있지만이 오류를 얻을ORDERBY 오름차순

오류

사전에 전달 된 모델 항목의 형식은 'System.Linq.OrderedEnumerable'2 [myproject.Models.NewsPostVM, System.Nullable'1 [System.Int32]] '이지만이 사전에는 모델 항목이 필요합니다 'System.Collections.Generic.List'1 [myproject.Models.NewsPostVM]'형식의. 컨트롤러

public ActionResult News() 
{ 
    var posts = db.NewsPosts.Select(d => new NewsPostVM() 
    { 
     ID = d.ID, 
     Heading = d.Heading, 
     Body = d.Body, 
     Images = d.Images.Select(i => new NewsImageVM() 
     { 
      Path = i.Path, 
      FileName = i.DisplayName 
     }).ToList() 
    }).ToList(); 
    var post= posts.OrderBy(m => m.ID); 
    return View(post); 
} 

보기

당신은 그것을 할당하기 전에 모델 데이터에 ToList 전화를해야
@model List<MyProject.Models.NewsPostVM> 
@foreach (var p in Model) 
{ 
    <div class="w3-container w3-center"> 
     <h5><b>@p.Heading</b></h5> 
     <p>@p.Body</p> 
     @foreach (var image in p.Images) 
     { 
      <img class="img-thumbnail" width="150" height="150" src="~/Images/@image.Path" /> 
     } 
     <h6>@p.Date</h6> 
    </div> 
} 
+2

어느 쪽이 받아들이 모델 정의를 변경 :

var post= posts.OrderBy(m => m.ID).ToList(); 

당신은 같이 당신의 변수 유형을 지정하여이 예기치 않은 동작을 방지 할 수 있습니다 결과를 강제로

사용 'ToList은'목록이 될 수 있습니다 IEnumerable'@model IEnumerable '또는'ToList()'를 추가하여 _controller_에서 다음과 같이 목록을 반환 할 수 있습니다 :'var post = posts.OrderBy (m => m.ID) .ToList(); ' –

+0

'var posts = db.NewsPosts.OrderByx => x.ID)를 사용하십시오 .Select (d => new NewsPostVM() {...}). ToList();' 'var post = posts.OrderBy (m => m.ID); '를 삭제하십시오 - 응답이 더 효율적입니다 (그러나'var'을 사용하지 않으면 명백 할 것입니다). –

답변

3

: 당신이보기에 대한 모델을 바꿀 수

var post= posts.OrderBy(m => m.ID).ToList(); 
return View(post); 

대안이 IEnumerable을 받아 (foreach를 통해 foreach를 사용하는 경우 IEnumerable이 좋습니다) :

@model IEnumerable<MyProject.Models.NewsPostVM> 
+0

고맙습니다. 내가 할 수있을 때 답변으로 표시 할 것입니다 – ARandomUserNamedChuck

+0

@ARandomUserNamedChuck 환영합니다 –

0

변수 유형으로 'var'를 사용하고 있기 때문에 컴파일러는 IOrderedEnumerable을 가장 적합한 유형으로 선택합니다. 그러나 귀하의 견해는 목록을 기대합니다.

IList<NewsPostVM> posts = posts.OrderBy(m => m.ID).ToList(); 
+2

당신은 jsu가 List에 IEnumerable을 할당 할 수 없었습니다. 두 번째 줄은 컴파일되지 않습니다 –

+0

맞습니다. .ToList()도 사용하도록 변경했습니다. 이것은 조금 더 많은 코드이지만, 새로운 사용자를 위해 변수 유형이 '마술처럼'변경되지 않도록합니다. – middelpat