我有一个基本的标签搜索系统设置,每个标签都有一个类别ID的字段。有些标签没有类别。
所以在我的方法中,我只是传递一个字符串来定义要列入的类别。
public IQueryable<Tag> List(string category)
{
//...
}
如果没有传递任何内容,我想返回没有类别的标签。如果我像这样编写查询,这是有效的。
return t from db.Tags
where t.Category == null
select t;
然而,我需要两个查询(一个如果是null,一个如果不是) 我想知道我是否可以在一个查询中完成所有操作以简化。
当前查询是......
return t from db.Tags
where t.Category.Name == name
select t;
答案 0 :(得分:1)
db.Tags
.Where(t=> Category==null?t.Category==null:t.Category.Name==Category);
答案 1 :(得分:0)
我认为这是最好的方法:
if(name == null)
return t from db.Tags
where t.Category.Name == null
select t;
else
return t from db.Tags
where t.Category != null && t.Category.Name == name
select t;
您不希望在DB服务器上执行更复杂的查询。如果组合2,这可能是可能的,查询还将包含名称的ISNULL检查。