Entity framework 在实体框架中选择可选导航属性属性的正确方法是什么?

Entity framework 在实体框架中选择可选导航属性属性的正确方法是什么?,entity-framework,select,null,navigational-properties,Entity Framework,Select,Null,Navigational Properties,选择可选导航属性实体框架的属性的正确方法是什么 我担心如果导航属性为空,那么当我尝试访问它的(可选导航属性的)属性时会抛出错误 以下是我尝试过的: return await this.relatedCasesRepository .GetAll() .AsNoTracking() .Where(rc => rc.FirstCaseId == caseId || rc.Se

选择可选导航属性实体框架的属性的正确方法是什么

我担心如果导航属性为空,那么当我尝试访问它的(可选导航属性的)属性时会抛出错误

以下是我尝试过的:

return await this.relatedCasesRepository
                    .GetAll()
                    .AsNoTracking()
                    .Where(rc => rc.FirstCaseId == caseId || rc.SecondCaseId == caseId)
                    .Select(rc => new RelatedCaseInfoDto
                    {
                        FirstCaseId = rc.FirstCaseId,
                        FirstCaseName = rc.FirstCase.Name,
                        SecondCaseId = rc.SecondCaseId,
                        SecondCaseName = rc.SecondCase.Name,
                        CaseRelationTypeId = rc.CaseRelationTypeId,
                        CaseRelationTypeName = rc.CasesRelationType?.Name,
                        Id = rc.Id
                    })
                    .ToArrayAsync();
代码:
rc.CasesRelationType?.Name
产生错误:

表达式树lambda不能包含null传播运算符


这是否意味着我应该执行第二个请求以获取可选导航属性的所有属性?或者,如果可选导航属性不为null,是否有方法查询可选导航属性的属性,否则返回null?

为什么不使用条件运算符

CaseRelationTypeName = (rc.CasesRelationType != null) ? rc.CasesRealtionType.Name : null;

这取决于您的查询是
IQueryable
还是
inumerable
。IQueryable包含一个表达式和一个提供程序。表达式表示查询。提供者知道谁必须执行查询,通常是数据库管理系统。提供者将表达式转换为DBMS理解并执行查询的语言。提供者不能翻译所有内容。如果您的提供程序不能,您将在使用ToList或foreach等执行查询时看到这一点。我如何检查我的提供程序是否支持
Select
子句中的三元运算符(这意味着它可以将其转换为SQL并在DB端执行)?我怎样才能检查我正在使用的提供商?:)只需执行语句(=ToList、foreach等),如果不受支持,则会出现异常。看见