c# - 如果不为 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();
如果这是不可能的,那么我必须手动编写更多代码来手动映射属性。
解决方案
您可以使用 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();
推荐阅读
- python - 尝试在 python 中使用 for 循环从 URL 列表中下载 wget.download,但是在 150 张图像之后它只是冻结了。(没有错误信息)
- json - 从几个实体中检索第一个实体
- r - R将图例添加到ggplot
- sql-server - 我想在 ASP.NET Core 中的两列之间建立一对一的关系
- flutter - 如何通过 Flutter 在本地日历中创建事件?
- xpath - 具有两个不同类名的嵌套表中的 Xpath 是什么
- android - 如何同时连接多个特征?
- java - 具有返回类型的消费者接口的 lambda 表达式
- php - 如何使用 .htaccess 文件更改 codeigniter 的 URL
- reactjs - 用于删除警报消息的反应事件?