Как Вы заставляете свой поиск с использованием булевых операторов Fulltext брать термин C++?

Метод AddRange() работает нормально. Проблема в том, что вы не читали документацию по методу расширения ToList() внимательно, и поэтому не понимаете, что метод ToList() возвращает совершенно новый объект .

Из документации :

Создает список < T> из IEnumerable < T>.

blockquote>

Поскольку объект, с которым вы вызываете AddRange(), на самом деле не является исходной коллекцией, исходная коллекция остается неизменной.

В некотором смысле, ваш вопрос List эквивалентен очень распространенному вопросу «почему string.Replace() не работает?»

В приведенном вами примере, на самом деле не намного лучше решение, чем просто не скрывая List в первую очередь. Вы можете, поскольку вы используете общий интерфейс ICollection, написать свой собственный AddRange() в качестве метода расширения:

public static void AddRange(this ICollection collection, IEnumerable range)
{
    foreach (T t in range)
    {
        collection.Add(t);
    }
}

Но я не уверен, что это действительно намного лучше, чем просто оставить введите как List, если цель состоит в том, чтобы иметь возможность изменять объект и использовать метод AddRange().

Бросить ссылку ICollection обратно к ее основному List (как предлагает другой ответчик) бессмысленно, так как это сведет на нет любое значение при использовании интерфейса ICollection в первую очередь.

Просто оставьте ссылку как List, по крайней мере, в любом контексте, где вам действительно нужно изменить коллекцию. (Хорошо, и даже, возможно, полезно, раскрыть этот список в других контекстах, используя только ICollection, но это совершенно другое обсуждение.)

Пока я отвечаю, я буду упоминать, что я Скептически относимся к тому, что вы правильно поняли цель предупреждения FxCop, поскольку раскрытие общих списков само по себе не является вредным.

8
задан zessx 25 June 2014 в 07:58
поделиться

3 ответа

Как я могу изменить MySQL для размещения этого?

Необходимо будет изменить идею MySQL того, каково слово.

Во-первых, минимальная длина слова по умолчанию равняется 4. Это означает, что никакой критерий поиска, содержащий только слова <4 буквы будут когда-либо соответствовать, является ли это 'C++' или ‘cpp’. Можно настроить это использование опции конфигурации ft_min_word_len, например, в my.cfg:

[mysqld]
ft_min_word_len=3

(Затем остановитесь/начните MySQLd и восстановите fulltext индексы.)

Во-вторых, ‘+’ не считается буквой MySQL. Можно сделать это буквой, но затем это означает, что Вы не сможете искать слово 'рыба' в строке ‘fish+chips’, таким образом, некоторый уход будет требоваться. И это не тривиально: это требует MySQL перекомпиляции или взламывания существующего набора символов. Посмотрите, что раздел начинается, “Если Вы хотите изменить набор символов, которые считают словесными символами...” в разделе 11.8.6 из документа.

выйдите + символ во время процесса ввода моих данных как что-то как "__ плюс" и затем изменение моего поиска для размещения

Да, что-то как этот - общее решение: можно сохранить 'реальные' данные (без выхода) в основной, категорической таблице   —  usually использование InnoDB для соответствия ACID. Затем вспомогательная таблица MyISAM может быть добавлена, содержа только искаженные слова для приманки полнотекстового поиска. Можно также сделать ограниченную форму стемминга использования этого подхода.

Другая возможность состоит в том, чтобы обнаружить поиски, что MySQL не может сделать, такие как те который имеют только короткие слова или необычные символы, и отступить к простому-но-медленному КАК или поиску REGEXP тех поисков только. В этом случае Вы, вероятно, также захотите удалить стоп-лист путем установки ft_stopword_file к пустой строке, так как это не практично для взятия всего в этом как особенного также.

8
ответ дан 5 December 2019 в 19:03
поделиться

Обычно завершенные символы используются в запросе не в данных базы данных. Попытайтесь выйти из каждого "+" в Вашем запросе.

0
ответ дан 5 December 2019 в 19:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: