AsEnumerable 的意义?

发布于 2024-12-07 11:09:51 字数 461 浏览 0 评论 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的意义是什么?如果 .NET Framework 中不存在 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")
    };

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?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

我早已燃尽 2024-12-14 11:09:51

假设我正确解释它,它正在调用 DataTableExtensions.AsEnumerable()。如果没有它(或类似的东西),您就无法使用 LINQ to Objects,因为 DataTable 不实现 IEnumerable,仅实现 IEnumerable

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

Assuming I'm interpreting it correctly, it's calling DataTableExtensions.AsEnumerable(). Without that (or something similar), you can't use LINQ to Objects as DataTable doesn't implement IEnumerable<T>, only IEnumerable.

Note that an alternative would be to use Cast<DataRow>, but that would be subtly different as that would use the DataTable's GetEnumerator directly within Cast, whereas I believe EnumerableRowCollection<TRow> does slightly more funky things with the data table. It's unlikely to show up any real changes, except possibly a slight performance difference.

橪书 2024-12-14 11:09:51

.AsEnumerable() 扩展只是将实现 IEnumerable 的东西强制转换为 IEnumerable

所以,如果xsint[],您可以调用 xs.AsEnumerable() 而不是 (xs as IEnumerable)。它使用类型推断来避免需要显式键入 xs 的类型。

以下是 Reflector.NET 提取的代码:

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

但在这种情况下,我想我必须同意 Jon 的观点。它可能来自 System.Data.DataSetExtensions 程序集。

The .AsEnumerable() extension is just short-hand for casting something that implements IEnumerable<T> to be IEnumerable<T>

So, if xs is int[], you can call xs.AsEnumerable() instead of (xs as IEnumerable<int>). It uses type inference to avoid needing to explicitly keying the type of xs.

Here's the code extracted by Reflector.NET:

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

But in this case I think I have to agree with Jon. It's probably from the System.Data.DataSetExtensions assembly.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文