linq 表达式内部的深度空检查,有没有更好的方法?
Deep null check inside linq expression, is there a better way?
除非它在 Linq 表达式中,否则我可以使用运算符“?.”。但是因为我不能在 Linq 中使用它,所以它是糟糕的代码编写。如何进行深度空值检查?
_collection.Select(x=> new CollectionModel
{
Title = x.CollectionValues != null &&
x.CollectionValues.Any(x => x.Amount == amount) &&
x.CollectionValues.First(x => x.Amount == amount).TranslationTitle != null &&
x.CollectionValues.First(x => x.Amount == amount).TranslationTitle.TranslationValues != null &&
x.CollectionValues.First(x => x.Amount == amount).TranslationTitle.TranslationValues.Any(x => x.LanguageId == languageId) ?
x.CollectionValues.First(x => x.Amount == amount).TranslationTitle.TranslationValues.FirstOrDefault(x => x.LanguageId == languageId).Value
: ""
}
)
尽量不要在 LINQ to Entities 查询中进行任何空值检查。 EF 应该自动处理空值:
_collection.Select(x=> new CollectionModel
{
Title = x.CollectionValues!.FirstOrDefault(x => x.Amount == amount)!
.TranslationTitle.TranslationValues!
.FirstOrDefault(x => x.LanguageId == languageId)!
.Value ?? ""
}
);
除非它在 Linq 表达式中,否则我可以使用运算符“?.”。但是因为我不能在 Linq 中使用它,所以它是糟糕的代码编写。如何进行深度空值检查?
_collection.Select(x=> new CollectionModel
{
Title = x.CollectionValues != null &&
x.CollectionValues.Any(x => x.Amount == amount) &&
x.CollectionValues.First(x => x.Amount == amount).TranslationTitle != null &&
x.CollectionValues.First(x => x.Amount == amount).TranslationTitle.TranslationValues != null &&
x.CollectionValues.First(x => x.Amount == amount).TranslationTitle.TranslationValues.Any(x => x.LanguageId == languageId) ?
x.CollectionValues.First(x => x.Amount == amount).TranslationTitle.TranslationValues.FirstOrDefault(x => x.LanguageId == languageId).Value
: ""
}
)
尽量不要在 LINQ to Entities 查询中进行任何空值检查。 EF 应该自动处理空值:
_collection.Select(x=> new CollectionModel
{
Title = x.CollectionValues!.FirstOrDefault(x => x.Amount == amount)!
.TranslationTitle.TranslationValues!
.FirstOrDefault(x => x.LanguageId == languageId)!
.Value ?? ""
}
);