2012-02-07 2 views
1

은 내가 ObjectDataSource를쿼리 LINQ 및 ObjectDataSource를

<asp:DropDownList ID="DropDownList1" runat="server" 
       DataSourceID="UserODS" DataTextField="LastName" 
       DataValueField="IDUser"> 
</asp:DropDownList> 

<asp:ObjectDataSource ID="UserODS" runat="server" 
       SelectMethod="GetListFullNameUsers" TypeName="DAL.AccessoDB"> 
</asp:ObjectDataSource> 

방법에 따라이 드롭 다운리스트에 문제가있는 것은

DataBinding : 'System.String'에 'LastName'이라는 이름의 속성이 없습니다.

어떻게 해결할 수 있습니까?

미리 감사드립니다.

루이지

+5

이 이전 질문에 대한 답변의 일부에 동의합니다. 감사하는 사용자가되기 전까지 아무도이 질문에 대답하지 않기를 바랍니다. –

답변

1

확인 ... 여기에 문제는 다음

귀하의 LINQ 쿼리는 일반 문자열 목록을 반환하고 그 문자열 LastName라는 속성이 없기 때문에 그래서 당신의 데이터 바인딩이 실패합니다. 당신이 DataTextField="LastName" 등을 가지고 있기 때문에 LastName라는 속성을 강력한 형식의 개체를 반환 here을 같이

한 가지 가능한 솔루션은 클래스로 anonymous type을하는 것입니다 DropDownListLastName라는 속성을 기대 않습니다.

+0

익명 형식에 LastName 속성이 포함되어 있지만 쿼리에서 String (String.Concat ...)을 반환합니다. –

+0

@GertArnold : 물론, 그의 메소드 반환 유형도 틀렸다고 생각합니다. 그는 실제로 데이터 소스가 기대하기 때문에 LastName이라는 속성이있는 유형을 반환해야합니다. 'DataTextField = "LastName"을 보라. 문자열 목록을 반환하는 것은 작동하지 않을 것이라고 생각하지만 지금 당장 코드를 컴파일 할 수 없기 때문에 의문의 여지가 있습니다. –

0

왜 여러 개의 선택/수신 목록이 있습니까?

이 시도 :

return context.Users 
        .Select(c => string.Format("{0} {1}", c.LastName, c.FirstName)) 
        .ToList(); 
+0

데이터 소스에 LastName이라는 속성이 필요하므로 작동하지 않을 것입니다. 그러나 쿼리에 대한 당신의 추론은 꽤 좋습니다. –