我对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。这个查询的正确陈述应该是什么?
答案 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的所有者之后将任何值与空所有者放在一起,所以当您获取第一个结果时,它将获得一个拥有所有者的值,如果它是本。