我们很难找出处理此问题的最佳方法,而无需在获取数据后声明循环。
以这段代码为例:(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/