Значение AsEnumerable? - PullRequest
       32

Значение AsEnumerable?

0 голосов
/ 29 сентября 2011
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, то каков будет подход разработчиков для выполнения вышеуказанной задачи?

Ответы [ 2 ]

3 голосов
/ 29 сентября 2011

Если я правильно интерпретирую это, он вызывает DataTableExtensions.AsEnumerable(). Без этого (или чего-то подобного) вы не можете использовать LINQ to Objects, так как DataTable не реализует IEnumerable<T>, только IEnumerable.

Обратите внимание, что альтернативой было бы использование Cast<DataRow>, но это было бы несколько иным образом, так как это использовало бы DataTable GetEnumerator непосредственно в Cast, тогда как я считаю EnumerableRowCollection<TRow> делает немного более забавные вещи с таблицей данных. Маловероятно, чтобы были какие-либо реальные изменения, кроме, возможно, небольшой разницы в производительности.

1 голос
/ 29 сентября 2011

Расширение .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 сборки.

...