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

Lui*_*zão 3 .net linq

使用Linq Query时我遇到了一个误解问题我确实有这个实体

class Content  
{          
    public string Type = "X";
    public string Name;  
    public int? Owner;  
}  
Run Code Online (Sandbox Code Playgroud)

列表列表包含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);
Run Code Online (Sandbox Code Playgroud)

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

Jon*_*eet 5

你在这里应用了两个过滤器.该where子句只返回具有给定所有者的值 - 然后该FirstOrDefault子句中的谓词将仅考虑没有所有者的值.

我建议你使用:

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

使用OrderByDescending具有非null所有者的值之后将任何值与null所有者放在一起,因此当您获取第一个结果时,如果它存在,它将获得一个拥有者的值.