首页 > 解决方案 > 如果不为 null,则在一个 LINQ 行中获取属性的值

问题描述

我正在使用 LINQ,在其中,我有此代码返回字符串或 null。问题是如果GetUserName返回null,它会出错。如何在一行中编写如果GetUserName不为空,它将返回用户名属性?

username = service.GetUserName(t.Id).username

完整的查询如下所示:

var members = data.Select(t => new Members
{ username = service.GetUserName(t.Id).username }).ToList();

如果这是不可能的,那么我必须手动编写更多代码来手动映射属性。

标签: c#linq

解决方案


您可以使用 null 条件运算符?.,但这意味着您将获得具有该username属性的成员null- 我建议where在初始选择之后也添加一个:

var members = data
    .Select(t => new Members{ username = service.GetUserName(t.Id)?.username })
    .Where(m => m.userName is object)
    .ToList();

如果Members类的构造函数比较重,可以先选择userName,然后过滤,再创建Memebers列表:

var members = data
    .Select(t => new { service.GetUserName(t.Id)?.username }) 
    .Where(m => m.userName is object)
    .Select(t => new Members{ username = t.username })
    .ToList();

推荐阅读