C# 仅当实体框架核心映射相关实体不为空时
我有这两个类,进程和任务。任务是一个相关实体,是可选的。我希望仅当select不为空时,才能将任务属性映射到select上。我怎么处理C# 仅当实体框架核心映射相关实体不为空时,c#,asp.net-core,entity-framework-core,razor-pages,C#,Asp.net Core,Entity Framework Core,Razor Pages,我有这两个类,进程和任务。任务是一个相关实体,是可选的。我希望仅当select不为空时,才能将任务属性映射到select上。我怎么处理 public class Process { public int Id {get;set;} public string Description {get;set;} public int? TaskId {get;set;} public Task Task {get;set;} } public class Task {
public class Process
{
public int Id {get;set;}
public string Description {get;set;}
public int? TaskId {get;set;}
public Task Task {get;set;}
}
public class Task
{
public int Id {get;set;}
public string Description {get;set;}
}
在我的剃须刀页面上
public PageViewModel Process {get;set;}
[BindProperty(SupportsGet = true)]
public int Id { get; set;}
public void OnGet()
{
Process = _context.Processes
.Select(p => new PageViewModel
{
Id = p.Id,
Description = p.Description,
HasTask = p.TaskId.HasValue,
TaskDescription = p.Task.Description // How to handle if task is null here?
})
.FirstOrDefault(p => p.Id == Id)
}
public class PageViewModel
{
public int Id{get;set;}
public string Description {get;set;}
public bool HasTask {get;set;}
public string TaskDescription {get;set;}
}
p、 任务==null?:p、 Task.DescriptionTaskDescription=p.Task?.Description
如果Task为null,上面的代码会将TaskDescription设置为null。但是如果Task因为不存在并试图访问null内存而未初始化,这不会引发null引用异常吗?此链接提供了关于问号运算符的进一步详细说明。这是你的解决方案吗?我明白了,我想我现在明白了。我知道terniary操作符,但我以前从未这样使用过。感谢您的解释这里确实有一些表达式您不能在针对您的上下文的LINQ查询中使用。我没有考虑过。您还可以首先从数据库中检索记录,然后将其强制转换到PageViewModel。供进一步参考:这是不正确的。它将返回null,而不是空字符串