2009-02-02 13 views
11

아직 DB2에 Linq가 없으므로 (코드 명 IBM!) 코드에 IQueryables 또는 IEnumerables를 처리하고 싶습니다. DataTable을 IQueryable로 변환하는 방법은 무엇입니까? 또는 IEnumerable?데이터 집합을 IQueryable로 변환 <T> 또는 IEnumerable <T>

나는 MSFT 그것을 뽑으면 때문에, .AsQueryable를 지원하지 않는 인터페이스와 데이터 테이블의 열을 일치하는 클래스 ...

IQueryable<IMyData> GetAS400Data(..parameters..) 
{ 
    DataSet d = GetData(); 
    ... 
    //Some code to convert d to IQueryable<IMyData> 
} 

DataTable.Rows, 그래서 내가 무엇을 잘 모르겠어요 여기서 해.

+0

.AsEnumerable() <= using System.Data; –

답변

17
table.AsEnumerable()... 

table.AsEnumerable().AsQueryable()... 

그러나 자신의 유형에 맞는 번역본 (Select)을 작성해야합니다. IQueryable<T>은 여전히 ​​LINQ-to-Objects를 사용합니다. IQueryable<T>IEnumerable<T> 이상으로 사용하는 유일한 목적 (이 시나리오에서)은 다른 이유로 - dynamic LINQ library 일 수 있습니다.

+0

다른 방법으로 어떻게 변환합니까? IQueryable에서 DataTable으로? – MattSlay

+1

'IQueryable '은 본질적으로 데이터에 대한 뷰입니다. 원래의 'DataTable'은 여전히 ​​남아 있습니다. * DataTable을 만들려면 * http://stackoverflow.com/questions/545328/datatable-to-generic-list-memory-leak –

+0

@MarcGravell이 번역 방법에 대해 자세히 설명해 줄 수 있습니까? try IQueryable resultList = (DataSet.Tables [0]). AsEnumerable(). AsQueryable(); 오류가 발생했습니다 : 유형 IQueryable 을 IQueryable 유형 으로 변환 할 수 없습니다. –

1

Take a look here DB2 용 엔티티 프레임 워크가있는 공급자가있는 것으로 보입니다.

+0

불행히도 작년에 좋지 않은 경험으로 인해 EF는 제게 배제되었습니다. 그것은 EF가 MSFT의 미래이기 때문에 불행한 ... – jlembke

1

다음과 같이 사용할 수 있습니다.

DataSet ds = GetData(); 
DataTable dt= ds.Tables[0]; 
var query = 
    from row in dt.AsEnumerable() 
    select new IMyData() 
    { 
     property1= row[0], 
     property2= row[1] 
    };