2011-09-29 52 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的意義是什麼?如果.NET Framework中不存在AsEnumerable,那麼開發人員執行上述任務的方法是什麼?AsEnumerable的意義?

回答

3

假設我正確解釋它,它叫DataTableExtensions.AsEnumerable()。沒有那個(或類似的東西),你不能使用LINQ to Objects,因爲DataTable不實現IEnumerable<T>,只有IEnumerable

需要注意的是另一種是使用Cast<DataRow>,但是這將是微妙的不同,因爲這將使用DataTableGetEnumeratorCast直接,而我相信EnumerableRowCollection<TRow>與數據表略做更時髦的事情。這不太可能顯示出任何實際的變化,除非可能有輕微的性能差異。

1

.AsEnumerable()擴展只是短手鑄造的東西,實現IEnumerable<T>IEnumerable<T>

所以,如果xsint[],你可以叫xs.AsEnumerable()而不是(xs as IEnumerable<int>)。它使用類型推斷來避免需要明確地鍵入xs的類型。

這是一個被Reflector.NET提取代碼:

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

但在這種情況下,我認爲我有與Jon同意。它可能來自System.Data.DataSetExtensions組件。