2009-12-24 21 views
0

我有一个基本的标签搜索系统设置,每个标签都有一个ID为一个类别的字段。一些标签将没有类别。LINQ,选择标题匹配的地方,否则如果对象为空

所以在我的方法中,我只是通过一个字符串来定义列表中的类别。

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

如果'name'为null,那么它会工作吗?为什么你需要'== null'查询? – 2009-12-24 20:21:56

+0

不,这不起作用。我曾试过这种方式。如果name为null,与将对象等同为null不同,它会尝试获取对象本身的名称,它是一个空对象,并引发错误。 – Ciel 2009-12-24 20:24:19

+0

什么样的错误/异常?只是想知道什么可能是错误的,因为这应该只是工作.. – 2009-12-24 20:25:34

回答

1
db.Tags 
.Where(t=> Category==null?t.Category==null:t.Category.Name==Category); 
0

我觉得这是最好的办法:你不希望DB服务器则需要上执行更复杂的查询

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; 

。如果将2(可能可能)组合起来,那么查询还将包含对名称的ISNULL检查。

相关问题