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")
    };

In the above coding, what is the significance of AsEnumerable? if the AsEnumerable doesn't exist in .NET Framework, then what would be the approach of developers to perform the above the task?

4

2 回答 2

3

假设我解释正确,它正在调用DataTableExtensions.AsEnumerable(). 没有那个(或类似的东西),你不能使用 LINQ to Objects as DataTabledoesn't implement IEnumerable<T>, only IEnumerable.

请注意,另一种方法是使用Cast<DataRow>,但这会略有不同,因为它将直接使用DataTable'GetEnumeratorCast,而我EnumerableRowCollection<TRow>相​​信对数据表会做一些更时髦的事情。除了可能存在轻微的性能差异外,它不太可能显示出任何真正的变化。

于 2011-09-29T10:55:21.177 回答
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;
}

但在这种情况下,我认为我必须同意乔恩的观点。应该是System.Data.DataSetExtensions集会吧

于 2011-09-29T11:00:23.333 回答