Linq一个奇怪的现象(关于STRING与IEnumerable在distinct,查询Dataset)

helloxxxxx111 2010-07-31 09:53:21
做一个东西,过程中遇到一个奇怪的现象,起初以为是弱类型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不是委托类型。


-.-有高手能解释下这个现象么?谢谢
...全文
80 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
helloxxxxx111 2010-07-31
  • 打赏
  • 举报
回复
喔-。-果然,现在想那个丢掉的0就是那样被我搞掉的,楼上谢了。
Sunpire 2010-07-31
  • 打赏
  • 举报
回复
Distinct() 是这样用的么?

不要老是想着 lambda 表达式嘛,先看看用扩展方法是怎么用的,以楼主的第一种情况为例:

var ClassQuary = myExcelENDatatable.Select(tempRow=>tempRow.StudentClass).Distinct();

对应的 lambda 当然应是

var ClassQuary =
(from tempRow in myExcelENDatatable
select tempRow.StudentClass).Distinct();

8,497

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 LINQ
社区管理员
  • LINQ
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧