我的服务项目中有以下代码,它试图根据标记获取帖子列表...就像我们在这里所提到的那样(没有将其作为meta.stackoverflow.com问题,并充分尊重....)
此服务代码创建一个linq查询,将其传递给存储库,然后返回结果。没有什么太复杂的。我的LINQ 过滤器方法失败,出现以下错误: -
方法'布尔值 包含(System.String)'没有 支持转换为SQL。
我不确定我应该如何更改我的linq过滤器方法:(这是代码......
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);
}
和Filter方法......
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;
}
有什么想法吗?我不知所措:(
答案 0 :(得分:1)
尝试Any
:
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.Any(t => t == tag)
select p;
}
。
艾哈迈德的另一个建议(在下面的评论中)。这使用Contains方法,因此它将返回包含标记'Test'的所有帖子,例如。标记'睾丸'的帖子: -
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.Any(t => t.Contains(tag))
select p;
}
答案 1 :(得分:0)
在WithTag中,尝试将查询更改为使用List而不是IList:
return from p in query
let taglist = p.TagList as List<string>
where taglist.Contains(tag)
select p;
同时查看此答案,类似于我的建议:Stack overflow in LINQ to SQL and the Contains keyword