我们很难找出处理此问题的最佳方法,而无需在获取数据后声明循环。

以这段代码为例:(Data2 通过外键绑定(bind)到 Data)

context.Data.Select(_ => new DataModel
                    {
                        Id = _.Id,
                        Data2 = new Data2Model
                        {
                            Id = _.Data2.Id,
                            Name = _.Data2.Name,
                            Date = _.Data2.Date
                        },
                        Date = _.Date
                     });

如果 _.Data2 不为空,那么它运行正确,但如果 _.Data2 恰好为空,那么这将出错。我们现在解决这个问题的方法是将 Data2Id 添加到我们的 DataModel 中,然后循环遍历所有记录以获取信息(如果它不为空)。
var lst = context.Data.Select(_ => new DataModel
                             {
                                 Id = _.Id,
                                 Data2Id = _.Data2ID
                                 Date = _.Date
                              }).ToList();

foreach(var item in lst)
{
     if (item.Data2Id != null)
     {
         var dataItem = context.Data2.FirstOrDefault(_ => _.Id == item.Data2Id);
         item.Data2 = new Data2Model
         {
             Id = dataItem.Id,
             Name = dataItem.Name,
             Date = dataItem.Date
         }
      }
}

是否有更清洁/更好的方法将其保留在原始选择循环中。

谢谢

最佳答案

尝试:

Data2 = _.Data2 == null ? null : new Data2Model
{
    Id = _.Data2.Id,
    Name = _.Data2.Name,
    Date = _.Data2.Date
},

关于c# - 在带有 Entity Framework 的 Lambda 中使用 .Select() 时处理空嵌套值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44663056/

10-11 07:24