3

我对这种使用 Linq Query 有误解我确实有这个实体

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

和一个列表列表,该列表包含 2 个成员,除名称和所有者外,其类型均相等(一个为空,另一个不是)。所以我尝试查询以查找具有特定所有者的内容,如果没有找到,则返回另一个下面使用的查询:

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。此查询的正确语句应该是什么?

4

1 回答 1

5

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

我建议你使用:

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

UsingOrderByDescending会将任何具有 null 所有者的值放在具有非 null 所有者的值之后,因此当您获取第一个结果时,如果存在所有者,它将得到一个所有者。

于 2012-06-14T16:27:21.710 回答