I’ve got the following code in my Services project, which is trying to grab a list of posts based on the tag … just like what we have here at SO (without making this a meta.stackoverflow.com question, with all due respect….)
This service code creates a linq query, passes it to the repository and then returns the result. Nothing too complicated. My LINQ filter method is failing with the following error :-
Method ‘Boolean
Contains(System.String)’ has no
supported translation to SQL.
I’m not sure how i should be changing my linq filter method 🙁 Here’s the code…
public IPagedList<Post> GetPosts(string tag, int index, int pageSize)
{
var query = _postRepository.GetPosts()
.WithMostRecent();
if (!string.IsNullOrEmpty(tag))
{
query = from q in query
.WithTag(tag) // <--- HERE'S THE FILTER
select q;
}
return query.ToPagedListOrNull(index, pageSize);
}
and the Filter method…
public static IQueryable<Post> WithTag(this IQueryable<Post> query,
string tag)
{
// 'TagList' (property) is an IList<string>
return from p in query
where p.TagList.Contains(tag)
select p;
}
Any ideas? I’m at a loss 🙁
Try with
Any:.
UPDATE (by PureKrome)
Another suggestion by Ahmad (in a comment below). This uses the Contains method so it will return all posts that contain the tag ‘Test’, eg. Post with Tag ‘Testicle’ :-