2012-03-10 2 views
0

저는 linq을 처음 사용하며 실시간으로 배우려고합니다. 내 애플 리케이션 중 하나에서 vb.net에서 코드는 다음과 같은 :Linq를 통한 각 반복의 경우

데이터와 data_org 각각 형 Contact.Prime 및 연락처 클래스의 관찰 가능한 모음
For Each k As BSPLib.ContactLib.Contact In data_org 
     data.Add(k.prime) 
    Next 

. 은 가능한 위

data = From k As BSPLib.ContactLib.Contact In data_org Select k.prime 

그러나 아래 실행시 다음과 같은 오류를주고있다처럼 LINQ 쿼리로 위의 작업을 수행하는 것입니다 :

Unable to cast object of type WhereSelectEnumerableIterator`2[BSPLib.ContactLib.Contact,BSPLib.ContactLib.ContactPrime]' to type 'System.Collections.ObjectModel.ObservableCollection`1[BSPLib.ContactLib.ContactPrime]'. 

당신이 나를 인도 시겠어요. 고맙습니다.

+0

최종 솔루션은이 방법을 사용하는 것입니다 BSPLib.ContactL 중 (데이터 = 새 System.Collections.ObjectModel.ObservableCollection을 ib.ContactPrime) (k부터 BSPLib.ContactLib.Contact에서 data_org로 k.prime 선택) – surpavan

답변

1

data 변수는 ObservableCollection으로 선언되었습니다. 열거 형에서 암시 적 변환까지의 암시 적 변환은 없습니다. 이러한 내용으로 ObservableCollection의 인스턴스를 만들어야합니다. 다행히도 생성자에 전달할 수 있습니다.

Dim query = From k As BSPLib.ContactLib.Contact In data_org Select k.prime 
data = New ObservableCollection(Of ContactPrime)(query) 
+0

이런 종류의 생성자도 있습니다. 즉, 중괄호 뒤에 중괄호가 있습니다. 그런 유형의 기사를 어디에서 찾을 수 있는지 지적 해 주시겠습니까? 시간 내 주셔서 감사합니다. – surpavan

+1

['ObservableCollection'] (http://msdn.microsoft.com/en-us/library/ms668604.aspx)는 일반적인 클래스입니다. 따라서 첫 번째 괄호 집합은 컬렉션에 포함 된 개체 유형을 나타냅니다. 두 번째 괄호 세트는 생성자에 대한 실제 인수입니다. 일반적으로 클래스와 인터페이스에서 일반적인 메소드를 처리 할 때는 두 세트의 괄호를 사용해야합니다. –

+0

감사합니다. – surpavan

0

이것은 linq 쿼리에서 k.prime을 선택했기 때문입니다.

쿼리 결과는 k.prime 유형입니다. K는 위의 코드에서 (k.prime)

가 대해서 typeof이기 때문에 따라서

당신이 data_org에 BSPLib.ContactLib.Contact으로 foreach 문에

foreach는 K를 캐스팅해야 할 유효하지 않습니다해야합니다 data_org 선택 K에서 BSPLib.ContactLib.Contact으로 K에서

데이터 =를 사용

답변 당
+0

고맙습니다. 그러나 내 질문은 k.prime 개체를 얻는 것입니다. – surpavan

관련 문제