c# - 在带有 Entity Framework 的 Lambda 中使用 .Select() 时处理空嵌套值

标签 c# entity-framework lambda

我们很难找到最佳的处理方式,而不是在获取数据后声明一个循环。

以这段代码为例:(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 不为 null 那么这将正确运行,但如果 _.Data2 恰好为 null 那么这将出错。我们现在解决这个问题的方法是将 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/

相关文章:

mysql - ASP.NET MVC Entity FrameWork 中一个 View 中的多个模型

entity-framework - View 和 Entity Framework

c# - Xamarin Studio 中的 Xamarin.Forms

c# - ILSpy,如何解决依赖关系?

c# - 如何拆分字符串并保留分隔符?

c# - 用于组合字符串的 lambda 列表

c# - 使用动态字段名称使用 LINQ 查询实体

c# - 为什么 css 样式不适用于 javascript 中的匹配行?

c# - 如何对具有不同架构的数据库执行 LINQ 查询?

java - 如何使用 Java lambda 将 List<Foo> 收集到 Map<Bar, List<Baz>>?