Mis*_*sky 9 c# linq expression
我只是想构建一个动态过滤器.最后回归
Expression<Func<Event, bool>>
Run Code Online (Sandbox Code Playgroud)
我曾尝试使用Combine(AndAlso)表达式,但它不起作用,最后我发现有IQueryable查询效果很好,但现在我怎样才能将它转换为返回类型 -
Expression<Func<Event, bool>>?
Run Code Online (Sandbox Code Playgroud)
我的代码:
public IQueryable<Event> GetBySearch(EventFilter search)
{
IQueryable<Event> query = this.Context.Events.AsQueryable();
Expression<Func<Event, bool>> expression = null;
if (search.CategoryId != 0)
{
query = query.Where(x => x.CategoryId == search.CategoryId);
}
if (search.SubCategoryId != 0)
{
query = query.Where(x => x.SubCategoryId == search.SubCategoryId);
}
expression = query.Expression as Expression<Func<Event, bool>>; //This convert is not working, it returns null.
return this.Context.Events.Where(expression);
}
Run Code Online (Sandbox Code Playgroud)
任何原因你不只是做以下事情:
public IQueryable<Event> GetBySearch(EventFilter search)
{
IQueryable<Event> query = this.Context.Events.AsQueryable();
if (search.CategoryId != 0)
{
query = query.Where(x => x.CategoryId == search.CategoryId);
}
if (search.SubCategoryId != 0)
{
query = query.Where(x => x.SubCategoryId == search.SubCategoryId);
}
return query;
}
Run Code Online (Sandbox Code Playgroud)
正如弗洛里安在评论中所说,应该避免返回IQueryables(如果可能的话).简单的解决方案是返回一个列表:
public List<Event> GetBySearch(EventFilter search)
{
IQueryable<Event> query = this.Context.Events.AsQueryable();
if (search.CategoryId != 0)
{
query = query.Where(x => x.CategoryId == search.CategoryId);
}
if (search.SubCategoryId != 0)
{
query = query.Where(x => x.SubCategoryId == search.SubCategoryId);
}
return query.ToList();
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5109 次 |
最近记录: |