【问题标题】:LINQ Select skips row if navigation property is null如果导航属性为空,LINQ Select 会跳过行
【发布时间】:2016-08-26 04:34:06
【问题描述】:

我正在使用 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,则会跳过整行,只返回两行中的一个。如果我省略了 Select 块中的最后一个属性 (FieldName),则会返回两行。

我也试过

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

运气不好。

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

【问题讨论】:

标签: c# linq entity-framework-core


【解决方案1】:

首先检查'FieldName'属性的类型,它是否接受null。那就试试吧

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

【讨论】:

  • FieldName 只是一个字符串,所以它可以为空。
猜你喜欢
  • 1970-01-01
  • 2016-04-11
  • 1970-01-01
  • 1970-01-01
  • 2014-12-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-03
相关资源
最近更新 更多