2013-07-29 2 views
0

SQL Server 데이터베이스에서 데이터를 가져 오려고합니다.엔터티 프레임 워크에서 linq를 사용하는 동안 형식 변환 오류가 발생합니다.

데이터베이스에 Standard이라는 테이블이 있습니다. 그것에는 세 개의 열 StandardID, StandardNameDescription이 있습니다.

Using db As New SchoolDBEntities 
    ComboSelectStandardToEdit.DataSource = db.Standards.ToList() 
    ComboSelectStandardToEdit.ValueMember = "StandardID" 
    ComboSelectStandardToEdit.DisplayMember = "StandardName" 
End Using 

가 지금은 txtStandardNametxtDescription라는 두 텍스트 상자가 있습니다

은 내가 여기에 코드가 StandardName

의 값을 입력하는 콤보 상자가 있습니다.

콤보 박스에서 선택한 StandardName을 기반으로이 두 텍스트 상자의 값을 채우고 싶습니다. 여기

내가 노력 코드입니다 :

Using db As New SchoolDBEntities 
      Dim standard = From s In db.Standards 
          Where s.StandardId = CInt(ComboSelectStandardToEdit.SelectedValue) 
          Select s 

      txtStandardName.Text = CType(standard, Standard).StandardName 
     End Using 

하지만 불행히도 내가 가진 오류 :

유형의 개체를 캐스팅 할 수 없습니다 'System.Data.Entity.Infrastructure.DbQuery `1[EF_WinForms_VB.Standard]' to type 'EF_WinForms_VB.Standard'.

답변

2

사용해보기

Dim standard = (From s In db.Standards 
    Where s.StandardId = CInt(ComboSelectStandardToEdit.SelectedValue) 
    Select s) 
    .FirstOrDefault 

txtStandardName.Text = standard.StandardName 

귀하의 Linq 쿼리는 현재 여러 항목을 포함 할 수있는 프로젝션을 보류 중입니다. 명시 적으로 프로젝션의 첫 번째 오브젝트를 요청하면 값에 액세스하기 전에 표준을 변환 할 필요가 없습니다.

+0

T 런타임에이 오류가 발생합니다. 'System.Object'유형의 상수 값을 만들 수 없습니다. 이 문맥에서는, 원시 형 또는 열거 형만이 지원되고 있습니다. – Khushi

+0

은 this가 where 절과 관련이있는 것으로 보입니다. 한 점에서는 'StandardID'를 사용하고 다른 곳에서는 객체의 속성이 아닌'StandardId '를 사용하고 있습니다. – Claies

+0

@ user2524507 : probaby는' 'Dim standard ...'줄 앞의 질의를 'CInt' 변환합니다 :'Dim standardId = CInt (ComboSelectStandardToEdit.SelectedValue)'그리고'Where' 절 :'Where s.StandardId = standardId' – Slauma

1

사용해보십시오

희미한 표준 = (들에서 db.Standards.AsEnumerable 에서 어디 s.StandardId = Convert.ToInt32 (ComboSelectStandardToEdit.SelectedValue) 선택들) .FirstOrDefault

txtStandardName.Text = 표준. 표준 이름

희망이 있습니다.

관련 문제