2016-10-21 4 views
1

내 ASP.NET Web Forms 응용 프로그램에서 (모델 바인딩/엔터티 프레임 워크)을 사용합니다.모델 바인딩을 사용하여 그룹화 쿼리를 사용하는 방법

내 Linq 쿼리 (그룹화 기준)의 결과를 Gridview에 표시하고 싶지만 실행할 수 없습니다! 뒤에

<asp:GridView runat="server" ID="UsersGrid" 
     ItemType="myApp.Models.users" DataKeyNames="id" 
     SelectMethod="UsersGrid_GetData" 
     AutoGenerateColumns="false"> 
    <Columns> 
     <asp:DynamicField DataField="Fonction" /> 
     <asp:DynamicField DataField="Count" /> 
    </Columns> 
</asp:GridView> 

코드 :

것은 암시 적으로 형식을 변환 할 수 없습니다 'System.Linq.IQueryable'에서 'System.Linq.IQueryable <>':

public IQueryable<users> UsersGrid_GetData() 
{ 
    ModelData db = new ModelData(); 

    var result = from d in db.users 
       group d by d.Fonction into grouped 
       select new 
       { 
        Fonction = grouped.Key, 
        Count = grouped.Count() 
       }; 

    return result.AsQueryable();   
} 

이 오류가 . 명시 적 변환 (당신이 캐스트를 누락?)

답변

1

당신은 익명 형식의 객체를 생성하고 Queryable에서로 변환하기 위해 노력하고 있습니다. 그래서이 오류가 발생합니다.

시도해보십시오. 방법 1 : '사용자'가 그리드보기에 바인딩하는 데 필요한 속성이있는 사용자 모델 자체를 사용하려는 경우.

public IQueryable<users> UsersGrid_GetData() 
    { 
     ModelData db = new ModelData(); 

     var result = from d in db.users 
       group d by d.Fonction into grouped 
        select new users 
        { 
         Fonction = grouped.Key, 
         Count = grouped.Count() 
        }; 

     return result; 

    } 

방법 2 : 대신 'P'의

public IQueryable<p> UsersGrid_GetData() 
    { 
     ModelData db = new ModelData(); 

     var result = from d in db.users 
       group d by d.Fonction into grouped 
        select new p 
        { 
         Fonction = grouped.Key, 
         Count = grouped.Count() 
        }; 

     return result; 

    } 

    public class p 
    { 
     public int? Fonction { get; set; } 
     public int Count { get; set; } 
    } 

다른 모델 'P'를 사용하여 응용 프로그램에 따라 유효한 이름을 지정합니다. 또한 그리드보기에서 필요한 변경을하십시오 ("ItemType ="myApp.Models.users "를 변경해야 할 수도 있음)

+0

고맙습니다. – ista9im

1

이 결과는 ModelIQueryable 아니다, 그것은 Anonymous TypeIQueryable이다 존재한다. 그래서 (새로운 DTO 클래스를 생성하고 대신를 반환)이 같아야합니다

public IQueryable<DTO> UsersGrid_GetData() 
{ 
    ModelData db = new ModelData(); 
    var result = from d in db.users 
       group d by d.Fonction into grouped 
       select new DTO 
       { 
        Fonction = grouped.Key, 
        Count = grouped.Count() 
       }; 
    return result.AsQueryable(); 
} 

public class DTO 
{ 
    public string Fonction { get; set; } 
    public int Count { get; set; } 
} 
+0

고맙습니다. – ista9im

관련 문제