【问题标题】:LINQtoSQL Error: Sequence operators not supported for type 'System.String'LINQtoSQL 错误:“System.String”类型不支持序列运算符
【发布时间】:2014-10-28 02:30:12
【问题描述】:

由于某种原因,我的代码无法运行。

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

我想选择表中所有重复的 ID,因此我使用 count != 1 并收到此错误。

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

请帮忙?

【问题讨论】:

    标签: linq-to-sql


    【解决方案1】:

    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】:

      如果您只想让 ID 本身的价值与他的一致,那么詹姆斯的回答与我认为您想要的很接近。如果您想要分配 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 中的对象列表展平。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多