StringComparer не работает в Join Linq

Мне нужно сцепить два массива string[] по совпадению без учета регистра и с учетом регистра.

Вычитал здесь вот такую конструкцию:

var sql = s.Join(p, str => s, 
pet => p, 
(str, pet) => new { Base = str, IsExists = pet != null }, 
StringComparer.InvariantCultureIgnoreCase);

Но шутка в том что компилятор на весь Join орёт: Ошибка CS0411 Аргументы типа для метода "Enumerable.Join<TOuter, TInner, TKey, TResult>(IEnumerable<TOuter>, IEnumerable<TInner>, Func<TOuter, TKey>, Func<TInner, TKey>, Func<TOuter, TInner, TResult>, IEqualityComparer<TKey>)" не могут определяться по использованию. Попытайтесь явно определить аргументы типа.

Убираю StringComparer.InvariantCultureIgnoreCase и не ругается. А мне сравнение по регистру важно.

Я уже и явно типы определил,

s.Join<string, string, string[], ListWordsExists>
(p, 
str => s, 
pet => p, 
(str, pet) => new ListWordsExists { Base = str, IsExists = pet != null },
StringComparer.InvariantCultureIgnoreCase)

а он в меня другой заразой плюется: Ошибка CS1929 'string[]" не содержит определение для "Join", и наиболее подходящий перегруженный метод расширения "Queryable.Join<string, string, string[], ListWordsExists>(IQueryable<string>, IEnumerable<string>, Expression<Func<string, string[]>>, Expression<Func<string, string[]>>, Expression<Func<string, string, ListWordsExists>>, IEqualityComparer<string[]>)" требует наличия получателя типа "IQueryable<string>".

Чего он от меня хочет я не понимаю. Всё же указано. Где я не прав?


Ответы (0 шт):