Reputation: 50002
I have a method that needs to accept an array of country names, and return a list of records that match one of those country names. I'm trying this
Public Shared Function GetConcessions(ByVal Countries As String()) As IEnumerable
Dim CountryList As String = Utility.JoinArray(Countries) ' turns string array into comma-separated string
Return (From t In New Db().Concessions _
Where CountryList Like t.Country _
Select t.ConcessionID, t.Title, t.Country)
End Function
but I get this error
*Only arguments that can be evaluated on the client are supported for the LIKE method
In plain SQL, this would be simple:
Select ConcessionID,Title from Concessions c where @CountryList like '%' + c.Country + '%'
How can I achieve this result in Linq to SQL?
I get the same message with string.Contains. It would be fine with
t.Country.contains(CountryList)
but I need
CountryList.contains(t.Country)
and that throws the same error I listed above.
Upvotes: 3
Views: 3772
Reputation: 532605
I think what you want to do is construct a List from Countries and use
List<string> ListOfCountries = new List(Countries)
...ListOfCountries.Contains(t.Country)
This would translate into
t.Country IN ('yyy','zzz',...)
Please excuse my C#-ishness..
Upvotes: 2
Reputation: 5290
You can use SqlMethods.Like
e.g.
Where SqlMethods.Like(t.country, "%Sweden%")
Upvotes: 9