2011-09-29 3 views
0
var query = 
    from dt1 in dtStudent.AsEnumerable() 
    join dt2 in dtMarks.AsEnumerable() 
     on dt1.Field<int>("StudentID") 
     equals dt2.Field<int>("StudentID") 
    select new StudentMark 
    { 
     StudentName = dt1.Field<string>("StudentName"), 
     Mark = dt2.Field<int>("Mark") 
    }; 

위 코드에서 AsEnumerable의 의미는 무엇입니까? AsEnumerable이 .NET Framework에 없으면 위의 작업을 수행하는 개발자의 접근 방법은 무엇입니까?AsEnumerable의 의의?

답변

3

올바르게 해석한다고 가정하면 DataTableExtensions.AsEnumerable()입니다. 그 (또는 이와 유사한)없이 DataTableIEnumerable<T>을 구현하지 않으므로 IEnumerable 만 LINQ 개체를 사용할 수 없습니다. 대안 Cast<DataRow>을 사용하는 것입니다,하지만 그 사용 하듯이 미묘하게 다를 것이라고

참고 DataTableGetEnumerator 직접 Cast 내, 내가 EnumerableRowCollection<TRow> 데이터 테이블과 약간 펑키 일을 생각하는 반면. 약간의 성능 차이를 제외하고는 실제 변경 사항이 표시되지 않을 수 있습니다.

1

.AsEnumerable() 확장 xsint[] 인 경우, 그래서 IEnumerable<T>

IEnumerable<T>를 구현 뭔가를 캐스팅 단지 짧은 손, 당신은 xs.AsEnumerable() 대신 (xs as IEnumerable<int>)를 호출 할 수 있습니다. 형식 유추를 사용하여 xs 형식을 명시 적으로 입력 할 필요가 없도록합니다.

여기 Reflector.NET에 의해 추출 된 코드입니다 :

public static IEnumerable<TSource> AsEnumerable<TSource>(
    this IEnumerable<TSource> source) 
{ 
    return source; 
} 

그러나 나는 생각이 경우에 나는 존에 동의해야합니다. 아마 System.Data.DataSetExtensions 조립품 일 겁니다.