Linq一个奇怪的现象(关于STRING与IEnumerable在distinct,查询Dataset)
做一个东西,过程中遇到一个奇怪的现象,起初以为是弱类型DS功能不完善,后来改为强类型DS,问题依旧。关键部分代码如下
StudentClass是myExcelENDatatable(强类型datatable)里面一个列,类别为string。我现在想选出里面不重复的StudentClass,代码如下
var ClassQuary =
from tempRow in myExcelENDatatable
select tempRow.StudentClass.Distinct();
OK,能行么,不行,编译器会将StudentClass由string转换为IEnumerable<char>,再调用Distinct,但没有给Distinct传递Comparer这个比较方法,所以ClassQuary会得到所有的Class,内容重复,而且这里转换还有个奇怪的现象,例如内容 计算机0702 转换为 IEnumerable<char>会 变成计算机 07 2,中间少一个0 ,这个查询中ClassQuary的类型为IEnumerable<IEnumerable<char>>-.-
我又尝试了一下如下代码
var ClassQuary =
from tempRow in myExcelENDatatable
select tempRow.StudentClass.AsEnumerable<char>().Distinct();
问题依旧,所有现象同第一个查询,如果用
var ClassQuary =
from tempRow in myExcelENDatatable
select tempRow.StudentClass.AsEnumerable<char>();
这个时候查看ClassQuary的类别,类别是IEnumerable<IEnumerable<char>>,但内容正常,不会出现第一个查询中所说的丢0的现象。
实在不行了,又用如下代码
var ClassQuary =
from tempRow in myExcelENDatatable
select tempRow.StudentClass;
ClassQuary = ClassQuary.Distinct();
OK,这下正常了。得到了想要的结果,ClassQuary类型为IEnumerable<string>
回想一下又试了如下代码
var ClassQuary =
from tempRow in myExcelENDatatable
select tempRow.StudentClass.Distinct<string>();
这个不行,编译器会提示说Lambda表达式无法转换为string,string不是委托类型。
-.-有高手能解释下这个现象么?谢谢