'string' не содержит определения для 'Contains'
у меня есть такое заявление:
var vals =
from StandAloneUserPayment saup in _Session.Query<StandAloneUserPayment>()
.Fetch(x => x.RecurringPayments)
where
saup.User.UserId == userId
&& searchString.Contains(saup.FriendlyName, StringComparer.InvariantCultureIgnoreCase)
select
saup;
Это, кажется, именно то, что я должен делать, но я получаю всю строку с Contains
метод подчеркнут следующим сообщением:
string
не содержит определения дляContains
и лучший метод расширения перегрузкиSystem.Linq.ParallelEnumerable.Contains<TSource>(System.Linq.ParallelQuery<TSource>, TSource, System.Collections.Generic.IEqualityComparer<TSource>)
имеет некоторые недопустимые аргументы
что я делаю не так?
4 ответов
попробовать IndexOf
:
searchString.IndexOf(saup.FriendlyName,
StringComparison.InvariantCultureIgnoreCase) != -1
почему это не работает, потому что Contains
метод расширения, который принимает IEqualityComparer<TSource>
работает на String
, который реализует IEnumerable<char>
, а не IEnumerable<string>
, так что string
и IEqualityComparer<string>
не может быть передан ему.
даже если есть содержит(источник, элемент, компаратор) метод, вы не можете * использовать это с NHibernate, так как компараторы-это код, а не деревья выражений, которые NH может перевести.
*: то есть, если вы не напишете расширение поставщика LINQ, которое генерирует специальные случаи для вашего компаратора, но это не так.
The .Содержит, что вы используете, происходит от LINQ - он видит строку как IEnumerable<char>
, поэтому он хочет IEqualityComparer<char>
. The StringComparer
comparers реализации IEqualityComparer<String>
.
если minitech по IndexOf
метод работает, я думаю, что будет самый простой способ.