2011-05-09 4 views
4

인수를 허용하는 생성자가있는 Result<T>이라는 개체가 있습니다. 가능하다면 데이터 테이블을 전달할 수 있기를 원합니다.데이터 테이블을 IEnumerable <T>으로 변환하여 결과 <T> (IEnumerable <T> 데이터)로 전달합니다.

나는 datatable.AsEnumerable()을 시도했지만 'MyProperty'는 'DataRow'유형의 필드 또는 속성이 아니라는 데이터를 바인딩합니다. 'MyProperty'는 'DataRow'의 속성이 아니기 때문에 의미가 있습니다. ,하지만 그것은 내 데이터 테이블의 열이었습니다.

데이터 테이블을 Result 개체로 전달할 수있는 방법이 있습니까? 예를 들어 그리드 뷰에 바인딩하는 방법이 있습니까? 당신은 하나의 DataRow를 사용하여 'MyProperty」를 가지는 객체의 인스턴스를 생성 할 수있는 기능을 쓸 수있는 경우

+0

왜 Entity Framework를 사용하지 않습니까? –

답변

1

내가 변환 할 Linq에를 사용하여 종료 datatable을 익명 객체의 배열로 변환합니다.

Dim objs = From row In dt Select New With { 
    .Id = row.Field(Of Integer)("Id"), 
    .Count = row.Field(Of Integer)("Count") 
} 

은 그 때 나는 Dim result = GetResult(objs)

3

, 당신은 이런 식으로 작업을 수행 할 수 있습니다

datatable.AsEnumerable().Select(MyConversionFunction); 
+2

IIRC, dtatable.Rows.AsEnumerable() –

+0

@Cylon Cat - 아니요, [실제로는 없습니다] (http://msdn.microsoft.com/en-us/library/system.data.datatableextensions.asenumerable.aspx) . –

+0

나는 앉아있어! –

0

를 사용하여 호출 결과 개체의 생성자

Private Function GetResult(Of T)(ByVal data As IEnumerable(Of T)) As Result(Of T) 
    Return New Result(Of T)(Nothing, data) 
End Function 

에 익명 객체 배열을 얻기 위해 형식 유추를 사용하는 일반적인 기능을 생성하는 방법에 대한

table.Rows.Cast<DataRow>() 
+0

그게 무엇입니까? 당신은 여전히 ​​같은 문제에 빠지지 않겠습니까? 'MyProperty'는 DataRow 인스턴스의 속성이 아닙니다. – adam0101

+0

글쎄, 그건 당신에게 행을 제공해야합니다, 그리고 실제로 각 행에 대한 각각의 열에 접근 할 수 있습니다. 예를 들어'For Each rows For Dataroow In 행 \t Dim val = row ("MyProperty") 다음 – bottlenecked

0

입력 한 데이터 테이블을 EnumerableRowCollection을 사용하면 다음을 사용할 수 있습니다.

EnumerableRowCollection<YourTypedRow> typedRowCollection = datatable.AsEnumerable().Cast<YourTypedRow>(); 
관련 문제