代码之家  ›  专栏  ›  技术社区  ›  SpoiledTechie.com

LinqToSQL错误:“System.String”类型不支持序列运算符

  •  8
  • SpoiledTechie.com  · 技术社区  · 16 年前

    出于某种原因,我的代码不起作用。

        from tan in TANS
        where tan.ID.ToString().Count() != 1
        select tan
    

    我想选择一个表中重复的所有ID,所以我要使用计数!=1,我得到这个错误。

    NotSupportedException:类型“System.String”不支持序列运算符

    请帮忙?

    2 回复  |  直到 10 年前
        1
  •  13
  •   Joe Meta-Knight    10 年前

    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()也可以正常工作。

        2
  •  5
  •   David    16 年前

    詹姆斯的回答接近于我认为你想要的,如果你只是想要身份证本身的价值与他的相符。如果您想要对象,则会指定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);
    

    我肯定这不是林肯最干净的方式。如果我想出一个更干净的方法来做,我会在这里编辑它。这个selectmany非常重要,因为它会使igrouping中的对象列表变平。