使用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.这个查询的正确陈述应该是什么?
你在这里应用了两个过滤器.该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所有者放在一起,因此当您获取第一个结果时,如果它存在,它将获得一个拥有者的值.