카테고리 없음
[linq-to-entities] Linq는 반환 할 것이 없으면 예외를 throw합니다.
행복을전해요
2021. 1. 9. 02:30
문제는 FirstOrDefault가 null을 반환 할 수 있으며이를 확인해야한다는 것입니다.
var notificationMessage = ctx.NotificationMessages.Include("NotificationUsers")
.Where(x => x.Priority == priority)
.FirstOrDefault();
if (notificationMessage != null) {
var users = notificationMessage.NotificationUsers.ToList();
// ...
}
-------------------.FirstOrDefault().NotificationUsers
그것은 예상되는 것입니다. 널 체크가 없습니다!
-------------------FirstOrDefault는 결과가없는 nul lif를 반환합니다. 당신은 쓸 수 있습니다
var message = ctx.NotificationMessages.Include("NotificationUsers")
.Where(x => x.Priority == priority)
.FirstOrDefault();
var users = message == null ? new List<User>() : message.NotificationUsers.ToList();
또는 당신은 쓸 수 있습니다
var users = (ctx.NotificationMessages.Include("NotificationUsers")
.Where(x => x.Priority == priority)
.FirstOrDefault() ?? new NotificationMessage()).NotificationUsers.ToList();
-------------------쿼리를 중단하고 null을 확인할 수 있습니다. 또한 Where
여기에서는 불필요합니다.
using (var ctx = new MyEntities())
{
var nm = ctx.NotificationMessages.Include("NotificationUsers")
.FirstOrDefault(x => x.Priority == priority);
IList<NotificationUser> users = null;
if (nm != default(NotificationMessages))
users = nm.NotificationUsers.ToList();
else
users = new List<NotificationUser>();
// ...
}
-------------------다음과 같이 작성할 수 있습니다.
using (var ctx = new MyEntities())
{
var users = (ctx.NotificationMessages.Include("NotificationUsers")
.Where(x => x.Priority == priority)
.Select(x => x.NotificationUsers)
.FirstOrDefault() ?? Enumerable.Empty<NotificationUsersType>())
.ToList();
}
출처
https://stackoverflow.com/questions/2005963