Значение AsEnumerable?
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 ответа
Предполагая, что я правильно интерпретирую, это вызывает DataTableExtensions.AsEnumerable()
, Без этого (или чего-то подобного) вы не можете использовать LINQ to Objects как DataTable
не реализует IEnumerable<T>
, только IEnumerable
,
Обратите внимание, что альтернативой будет использование Cast<DataRow>
, но это было бы немного иначе, поскольку это будет использовать DataTable
"s GetEnumerator
прямо внутри Cast
тогда как я верю EnumerableRowCollection<TRow>
делает немного более забавные вещи с таблицей данных. Это вряд ли покажет какие-либо реальные изменения, за исключением, возможно, небольшой разницы в производительности.
.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
сборка.