Использование массива «обычно» работает так же, как использование списка или любой другой реализации IEnumerable<string>
- , учитывая, что метод расширения Contains
является стандартным методом расширения LINQ IEnumerable<T>
.
Исключение, которое вы получаете ...
...the method 'Boolean Contains[String](System.String[], System.String)'...
... удивительно, поскольку указывает на то, что компилятор не использует метод расширения LINQ.Если бы он использовал метод LINQ, исключение было бы что-то вроде:
...the method 'Boolean Contains[String](IEnumerable`1[String], System.String)'...
Или лучше: если бы он использовал этот метод, исключения не было бы вообще.
Вопросесть: у вас есть где-нибудь метод расширения Contains
для string[]
- либо рукописный, либо, возможно, включенный из какого-либо другого сборочного пространства / пространства имен?Что-то вроде:
public static class SomeExtensions
{
public static bool Contains<T>(this T[] ary, T value)
{
// ...
}
}
Если эта вещь используется (ваш код будет компилироваться), вы действительно получите исключение, потому что LINQ to Entities не знает, как преобразовать такой пользовательский метод в SQL (= "выражение хранилища"), независимо от того, как это реализовано.