2017-04-24 2 views
0

뷰의 내용을 표시 할 orders 테이블이 있습니다. 나는 평소 이런 것이다 :구별을 사용하여 나열 할 테이블을 어떻게 표시합니까?

return View(db.Orders.ToList()); 

그럼 내가보기에 표시 할 필드 전화 : 내가 같은 테이블을 표시하려면 내가 뭘

<th> 
     @Html.DisplayNameFor(model => model.OrderNum) 
    </th> 
    <td> 
     @Html.DisplayNameFor(model => model.CreateDate) 
    </td> 
    .... 
</th> 

을하지만를 ToList()하지만 내가 DISTINCTOrderNum 개의 행을 반환하도록하고 싶습니다. 여기에 내가 시도 무엇 :

var UserOrders = (from uo in db.Orders select new { uo.OrderNum, uo.CreateDate, ... }).ToList(); 
     var result = UserOrders.GroupBy(x=>x.OrderNum).Select(y=>y.First()); 
     return View(result.ToList()); 

다음과 같은 오류

사전에 전달 모델 항목 유형 'System.Collections.Generic.List 1[<>f__AnonymousType9 (10) [선택 System.Int32입니다 반환 어느, System.String, System.String, System.Decimal, System.Nullable 1[System.Boolean],System.Nullable 1 [System.Boolean], Project.Models.DeliveryOption]] '이 사전에는 모델이 필요합니다. 'System.Collections.Generic.IEnumerable`1 [Project.Models.Order]'형식의 항목입니다.

과 끝 부분에있는 별개의 명령을 무시

return View(db.Orders.ToList().Distinct()); 

. 모든 레코드를 반환합니다.

답변

1

첫 번째 시도가 가까이,하지만 당신은이 일을해야 익명의 형식으로 프로젝트에 필요하지 않은 : 다음과 같은 뭔가 작업을해야 내가 지난 있기 때문에 FirstOrDefault()을 사용하고

 var result = db.Orders.GroupBy(x=>x.OrderNum) 
      .Select(y=>y.FirstOrDefault()); 
     return View(result.ToList()); 

을 Entity Framework에서 쿼리 식 내부에 .First()을 사용하고 싶지 않습니다.

이유는 .ToList().Distinct()가 작동하지 않는 이유는 두 개의 프로그램이 두 개가 "동등"하다는 것을 프로그램에서 알지 못하기 때문입니다. 따라서 기본값은 메모리 주소를 찾는 것입니다. 반환 된 모든 객체는 서로 다른 메모리 주소를 가지므로 모든 객체가 고유하다고 생각합니다.

+0

감사합니다. – Skullomania

1

당신은 당신의보기를 강력하게 IEnumerable<Project.Models.Order> 유형이 아닌 IEnumberable<Anonymous>와 결합 될 때 문제를 일으키는 익명 형식 그 결과를 투사하는 경우 그룹화 한 후 Order에 투사한다 :

var UserOrders = (from uo in db.Orders 
        select new Order 
          { 
           OrderNum =uo.OrderNum, 
           CreatedDate = uo.CreateDate, ... 
           }).ToList(); 

를 이제 다음 코드 것 적절한 형식의 결과를 반환하십시오.

var result = UserOrders.GroupBy(x=>x.OrderNum).Select(y=>y.First()); 
return View(result.ToList()); 

프로젝트 및 materializ를하지 않으면 실제로 데이터베이스 측에서 그룹화 작업을 수행 할 수 있습니다. 결과를 다음과 같이 입력하면됩니다.

0

익명 형식을 사용하지 않고도이 작업을 수행 할 수 있습니다.

return View(db.Orders.GroupBy(x=>x.OrderNum).Select(y=>y.First()).ToList()); 
+0

GroupBy를 이미 만들었 으면 마지막 'Distinct()'가 필요하지 않습니다. – StriplingWarrior

+0

좋은 지적이며, 거기에 남기려하지 않았습니다.:) – Simon

관련 문제