出于某种原因,我的代码无效。
from tan in TANS
where tan.ID.ToString().Count() != 1
select tan
我想选择表中重复的所有ID,所以我使用count!= 1,我收到此错误。
NotSupportedException:类型'System.String'
不支持序列运算符请帮忙吗?
答案 0 :(得分:13)
tan.ID.ToString()
是一个字符串,而不是一个集合,因此您无法应用Count()。
我相信你想要的东西:(这种语法错了,但很接近)
from tan in TANS
group tan by tan.ID into dups
where dups.Count() > 1
select dups.Key;
更新(5年零下5天后):(谷歌有点奇怪问题并找到你写的答案..)这个问题的核心是LINQ语句试图建立一个SQL语句,并且数据库不知道如何将Count()应用于字符串。但是,如果对内存中的集合使用LINQ,那么它会将字符串视为IEnumerable,而Count()可以正常工作。
答案 1 :(得分:5)
詹姆斯的回答接近于我认为你想要的,如果你只是想让身份证的价值与他一致。如果您希望分配ID的对象尝试此操作。
var dupes = (from tan in TANS
group tan by tan.ID.ToString() into duplicates
where duplicates.Count() > 1
select duplicates.Select(d => d)).SelectMany(d => d);
在LINQ中不是最干净的方法我敢肯定。如果我想出一个更干净的方法,我会在这里编辑它。 SelectMany非常重要,因为它可以平整IGrouping中的对象列表。