我在partList
中有一个部分列表。我希望通过过滤Name
来获取部件的Number
。像
var foundPart = partList.Where(part => part.Number == 1).SingleOrDefault();
if(foundPart != null)
name = foundPart.Name;
我可以消除null
检查并将所有内容放在LINQ命令中吗?
答案 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)
如果foundPart
为null
会怎样?
如果你没有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";