如果navigation属性为null,则LINQ Select会跳过行

时间:2016-05-01 09:18:27

标签: c# linq entity-framework-core

我正在使用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 : ""
没有任何运气。

对我可能做错的任何想法?

1 个答案:

答案 0 :(得分:0)

首先检查' FieldName'的类型。属性,是否接受null。然后尝试

FieldName = j.WellNavigation.FieldNavigation!= null? j.WellNavigation.FieldNavigation.Name:null