【问题标题】:Significance of AsEnumerable?AsEnumerable 的意义?
【发布时间】:2011-09-29 10:52:08
【问题描述】:
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,那么开发人员执行上述任务的方法是什么?

【问题讨论】:

    标签: c# .net generics asenumerable


    【解决方案1】:

    假设我解释正确,它调用DataTableExtensions.AsEnumerable()。没有它(或类似的东西),你不能使用 LINQ to Objects,因为DataTable 没有实现IEnumerable&lt;T&gt;,只有IEnumerable

    请注意,另一种方法是使用Cast&lt;DataRow&gt;,但这会略有不同,因为它将直接在Cast 中使用DataTableGetEnumerator,而我相信EnumerableRowCollection&lt;TRow&gt; 会稍微时髦一些数据表的东西。除了可能存在轻微的性能差异之外,它不太可能显示出任何真正的变化。

    【讨论】:

      【解决方案2】:

      .AsEnumerable() 扩展只是将实现 IEnumerable&lt;T&gt; 的东西转换为 IEnumerable&lt;T&gt; 的简写形式

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

      这是 Reflector.NET 提取的代码:

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

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

      【讨论】:

        猜你喜欢
        • 2012-03-02
        • 1970-01-01
        • 2010-12-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-02-03
        • 1970-01-01
        • 2011-03-19
        相关资源
        最近更新 更多