DataTable data;data.AsEnumerable().Select(row => row["Factory"]).Distinct().ToArray()
这个结果到底是什么类型?虽然用 Object[] 也能用,但想弄清楚。
我用转成 String[] 和 DataRow[] 都抛异常。row["Factory"] 照理说返回的是 Factory 列的数据类型,但我的就是 string 。
Select() 返回的也就是 IEnumerable<string> ,再 Distinct() 不变。
再 ToArray() 返回的应该就是 string[] 了。
但事实是执行 (string[])(data...); 时会抛出异常,无法将 Object[] 转换。

解决方案 »

  1.   

    把鼠标放上去看提示就知道,我想最后应该是 object[]
      

  2.   

    如果data对应着一张表
    还是转成实体类把 字符串什么的 最讨厌的啦object[] = data.AsEnumerable().Select(row => row["Factory"]).Distinct().ToArray();Type t = object[0].GetType();
    t 就是真实类型
      

  3.   

    本身就是object[]select的原型本来就是IEnumerable<T2> select<T1,T2>(func<T1,T2> func)也就是他返回的类型由T2决定而你row["Factory"] 其本身就表明是T2是object型
      

  4.   

    data.AsEnumerable() 返回类型为 EnumerableRowCollection<DataRow> 。
    接着传给 Select() 的 TSource 自然也是 DdtaRow 。
    row => row["Factory"] 中 row 当然也是 DataRow 。
    然后
      

  5.   

    谢谢提醒,不过很奇怪
    (data.AsEnumerable().Select(row => row["Factory"]).Distinct().ToArray())[0].GetType()
    // 是 String 没错。
    (data.AsEnumerable().Select(row => row["Factory"]).Distinct().ToArray()).GetType()
    // 却是 Object[] 且不能强制转化为 String[] 。
      

  6.   

    ??????谁告诉你 row["xxx"]是datarow类型了????对象索引返回的类型可不是这个对象本身的类型List<int> a难道a[0]应该返回list类型吗??
      

  7.   

    (data.AsEnumerable().Select(row => (string)row["Factory"]).Distinct().ToArray()).GetType()又翻了一遍手册,明白了,DataRow[] 返回的是 Object ,(string)row["Factory"] 应该早在这里转。
      

  8.   


    逐个元素转
    .Select(row => (string)row["Factory"])
      

  9.   

    没错,看到了,手册上说了 DataRow[] 返回 Object 。你看花眼了,我是说 row 是 DataRow ,不是说 row["xxx"]。
      

  10.   

    变量前面加一个var 就知道什么类型了