在LINQ中集成NULL检查

时间:2014-02-14 14:35:12

标签: c# linq null

我在partList中有一个部分列表。我希望通过过滤Name来获取部件的Number。像

这样的东西
var foundPart = partList.Where(part => part.Number == 1).SingleOrDefault();
if(foundPart != null)
    name = foundPart.Name;

我可以消除null检查并将所有内容放在LINQ命令中吗?

3 个答案:

答案 0 :(得分:8)

string name = partList.Where(part => part.Number == 1)
                      .Select(part => part.Name) // project result here
                      .SingleOrDefault();

如果您希望避免在找不到匹配项时更改名称:

name = partList.Where(part => part.Number == 1)
               .Select(part => part.Name)
               .DefaultIfEmpty(name)
               .Single();

注意:我喜欢LINQ,但在这种情况下,我会稍微简化您的查询并保留 if 条件。非常清楚易懂:

var part = parts.SingleOrDefault(p => p.Number == 1);

if(part != null)
   name = part.Name;

答案 1 :(得分:2)

如果foundPartnull会怎样?

如果你没有name为空:

var name = partList
             .Where(part => part.Number == 1)
             .Select(part => part.Name)
             .SingleOrDefault();

如果要将其设置为其他值,请使用null-coalescing运算符:

var name = partList
             .Where(part => part.Number == 1)
             .Select(part => part.Name)
             .SingleOrDefault() ?? "Default Name";

如果您根本不想触摸name,则无法简化您已有的内容。

答案 2 :(得分:-1)

你可以使用.FirstOrDefault()而不是.SingleOrDefault()

var foundPart = partList.Where(part => part.Number == 1).FirstOrDefault() ?? "Default";