我正在使用Entity Frameowrk 7,并且具有以下LINQ查询以将数据选择到数据传输对象(DTO)中。要从导航属性中选择数据,我使用Include
来启用指定属性的预先加载。该表当前有两行,但只返回其中一行以响应以下查询:
var jobs = context.CorepJobs
.Include(j => j.CompanyNavigation)
.Include(j => j.WellNavigation.FieldNavigation)
.Select(j =>
new CorepJobDTO()
{
Id = j.Id,
Created = j.Created,
DepthAsFeet = j.DepthAsFeet,
JobType = j.JobType,
State = j.State,
ProjectNo = j.ProjectNo,
CompanyName = j.CompanyNavigation.CompanyName,
WellName = j.WellNavigation.Name,
FieldName = j.WellNavigation.FieldNavigation.Name
}
).AsEnumerable();
如果某些属性为null
,我希望查询使用null
填充DTO的相应属性。相反,如果FieldNavigation
属性为null
,则会跳过整行,并且只返回两行中的一行。如果我遗漏FieldName
块中的最后一个属性(Select
),则返回两行。
我也试过
FieldName = j.WellNavigation.FieldNavigation != null =? j.WellNavigation.FieldNavigation.Name : ""
没有任何运气。
对我可能做错的任何想法?
答案 0 :(得分:0)
首先检查' FieldName'的类型。属性,是否接受null。然后尝试
FieldName = j.WellNavigation.FieldNavigation!= null? j.WellNavigation.FieldNavigation.Name:null