LINQ,选择标题匹配的位置,否则,如果对象为空

时间:2009-12-24 20:10:09

标签: linq-to-sql

我有一个基本的标签搜索系统设置,每个标签都有一个类别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;

2 个答案:

答案 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检查。