Ошибка LINQtoSQL: операторы последовательности не поддерживаются для типа 'System.String' - PullRequest
8 голосов
/ 25 ноября 2008

По какой-то причине мой код не работает.

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

Я хочу выбрать все идентификаторы, которые являются дубликатами в таблице, поэтому я использую счет! = 1 и получаю эту ошибку.

NotSupportedException: операторы последовательности не поддерживаются для типа 'System.String'

Помогите пожалуйста?

Ответы [ 2 ]

13 голосов
/ 25 ноября 2008

tan.ID.ToString() - это строка, а не коллекция, поэтому вы не можете применить Count ().

Полагаю, вы хотите что-то вроде: (этот синтаксис неправильный, но близкий)

from tan in TANS
group tan by tan.ID into dups
where dups.Count() > 1
select dups.Key;

Обновление (через 5 лет минус 5 дней): (Это немного странно для Google, проблема и найти ответ, который ВЫ написали ...) В основе этой проблемы лежит оператор LINQ, пытающийся построить оператор SQL и база данных не знает, как применить Count () к строке. Однако, если вы используете LINQ для коллекции в памяти, тогда строка будет обрабатываться как IEnumerable, а Count () будет работать нормально.

5 голосов
/ 25 ноября 2008

Ответ Джеймса близок к тому, что, я думаю, вы хотите, если вы просто хотите, чтобы само значение идентифицировалось с его. Если вы хотите, чтобы объекту был присвоен идентификатор, попробуйте это.

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...