LINQ:使用FirstOrDefault返回成员或其他成员

时间:2012-06-14 16:24:11

标签: .net linq

我对Linq Query的使用存在误解问题 我确实有这个实体

class Content  
{          
    public string Type = "X";
    public string Name;  
    public int? Owner;  
}  

和列表清单 该列表包含2个成员,除了名称和所有者之外,它们按类型等于(一个为null,另一个不为)。 所以我尝试查询以查找具有特定所有者的内容,如果没有找到,则返回另一个下面使用的查询:

int? owner = 1;
  var result = (
     from c in list 
     where c.Type == "X" && c.Owner == owner 
     select c
     ).FirstOrDefault(c => c.Type == "X" && c.Owner == (int?)null);

但结果成员返回null。这个查询的正确陈述应该是什么?

1 个答案:

答案 0 :(得分:5)

您在此处应用两个过滤器。 where子句只返回具有给定所有者的值 - 然后FirstOrDefault子句中的谓词将只考虑没有所有者的值。

我建议您使用:

var value = list.Where(c => c.Type == "X" && 
                            (c.Owner == null || c.Owner == owner))
                .OrderByDescending(c => c.Owner)
                .FirstOrDefault();

使用OrderByDescending会在一个值为非null的所有者之后将任何值与空所有者放在一起,所以当您获取第一个结果时,它将获得一个拥有所有者的值,如果它是本。