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が.NETFrameworkに存在しない場合、上記のタスクを実行するための開発者のアプローチは何でしょうか。

4

2 に答える 2

3

私がそれを正しく解釈していると仮定すると、それはを呼び出していDataTableExtensions.AsEnumerable()ます。DataTableそれがなければ(または同様のもの)、実装されていないのでLINQtoObjectsを使用することはできませIEnumerable<T>IEnumerable

別の方法はを使用することですが、データテーブルで'sを直接Cast<DataRow>使用するのとは微妙に異なりますが、データテーブルでは少しファンキーなことを行うと思います。わずかなパフォーマンスの違いを除いて、実際の変更が表示される可能性はほとんどありません。DataTableGetEnumeratorCastEnumerableRowCollection<TRow>

于 2011-09-29T10:55:21.177 に答える
1

拡張機能は、実装する.AsEnumerable()ものをキャストするための省略形です。IEnumerable<T>IEnumerable<T>

したがって、の場合xsは、の代わりにint[]呼び出すことができます。型推論を使用して、の型を明示的にキーイングする必要がないようにします。xs.AsEnumerable()(xs as IEnumerable<int>)xs

Reflector.NETによって抽出されたコードは次のとおりです。

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

しかし、この場合、私はジョンに同意する必要があると思います。それはおそらくSystem.Data.DataSetExtensionsアセンブリからです。

于 2011-09-29T11:00:23.333 に答える