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框架中不存在AsEnumerable,那么开发人员执行上述任务的方法是什么?
发布于 2011-09-29 18:55:21
假设我的解释是正确的,那么它调用的是DataTableExtensions.AsEnumerable()。没有它(或类似的东西),你就不能使用LINQ to Objects,因为DataTable不实现IEnumerable<T>,只能实现IEnumerable。
注意,另一种选择是使用Cast<DataRow>,但这将是微妙的不同,因为它将直接在Cast中使用DataTable的GetEnumerator,而我认为EnumerableRowCollection对数据表做了稍微时髦的事情。它不太可能显示出任何真正的变化,除了可能的轻微性能差异。
发布于 2011-09-29 19:00:23
.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;
}但在这种情况下,我想我必须同意Jon的观点。它可能来自System.Data.DataSetExtensions程序集。
https://stackoverflow.com/questions/7596229
复制相似问题