Как установить переменную в null вместо перехвата NullReferenceException, когда поле базы данных пустое / null? - PullRequest
0 голосов
/ 16 декабря 2011

Я получаю список всех пользователей в моей базе данных со следующим кодом:

IEnumerable<Firma> firmaer = db.Firma.ToList();

Я пытаюсь сопоставить каждого пользователя ViewModel, который выглядит следующим образом:

public class UserViewModel
{
    public String CVR_Nummer { get; set; }
    public DateTime LastActivityDate { get; set; }
    public DateTime CreationDate { get; set; }
    public String FirmaNavn { get; set; }

}

Когда поле firma_navn в базе данных пусто, я получаю исключение NullReferenceException

model.FirmaNavn = firmaer.Where(x => x.CVR_nummer == user.UserName).FirstOrDefault().firma_navn ?? "Missing";

Выдает исключение NullReferenceException.

Я могу поймать это исключение, но где-то слышал, что ловить исключения довольно тяжело.

То, что я хотел бы сделать, это сделать

model.FirmaNavn = "Missing";

Если поле не заполнено в базе данных.

Возможно ли это без перехвата исключения, или я ошибаюсь из-за того, что перехват исключения является тяжелым?

EDIT

Вот как теперь выглядит метод (после справки):

public List<UserViewModel> MapUserViewModel(MembershipUserCollection users)
        {
            List<UserViewModel> userviewmodel = new List<UserViewModel>();

            IEnumerable<Firma> firmaer = db.Firma.ToList();

            foreach (MembershipUser user in users)
            {
                UserViewModel model = new UserViewModel();
                model.CVR_Nummer = user.UserName;
                model.CreationDate = user.CreationDate;
                model.LastActivityDate = user.LastActivityDate;

                var firma = firmaer.Where(x => x.CVR_nummer == user.UserName).FirstOrDefault();

                if (firma != null)
                {
if(string.IsNullOrEmpty(firma.firma_navn))
                        model.FirmaNavn = "Missing";
else
model.FirmaNavn = firma.firma_navn;
                }

                /*if (firmaer != null)
                {
                    var firma = firmaer.Where(x => x.CVR_nummer == user.UserName).FirstOrDefault();
                    model.FirmaNavn = firma.firma_navn ?? "Mangler";   
                }
                */
                userviewmodel.Add(model);
            }
            return userviewmodel;
        }

Сейчас работает. Спасибо.

Ответы [ 4 ]

2 голосов
/ 16 декабря 2011

Вы не ошибаетесь, когда ловите исключения как "тяжелые", и они действительно должны использоваться только для действительно исключительных обстоятельств.

Если firma_navn скорее всего будет null, то это не исключительное обстоятельство, поэтому вы должны кодировать соответственно:

if (firmaer != null)
{
    var model = firmaer.Where(x => x.CVR_nummer == user.UserName).FirstOrDefault();
    if (model != null)
    {
        model.FirmaNavn = model.firma_navn ?? "Missing";
    }
}
1 голос
/ 16 декабря 2011

Вам нужно проверить, возвращает ли ваш оператор LINQ сущность, чтобы избежать NullReferenceException.

var firma= firmaer.Where(x => x.CVR_nummer == user.UserName).FirstOrDefault();

if (firma != null)
{
    model.FirmaNavn = 
        string.IsNullOrEmpty(firma.firma_navn) ? "Missing" : firma.firma_navn;

   // do stuff with model
}
0 голосов
/ 13 октября 2015
// seems the line firmaer.Where(x => x.CVR_nummer == user.UserName).FirstOrDefault() is returning null or no match found

// you can try this. i guess FirmA is the model class  
model.FirmaNavn = (firmaer.Where(x => x.CVR_nummer == user.UserName).FirstOrDefault() ?? new FirmA(){firma_navn="Missing"}).firma_navn;
0 голосов
/ 16 декабря 2011

попробуйте это:

  var test= = firmaer.Where(x => x.CVR_nummeruser.UserName).FirstOrDefault();

  if(test == null)
  {
  model.FirmaNavn = "Missing";
  }
  else
  {
    model.FirmaNavn =(string)test;
  }

Смотри также:

C # ?? нулевой оператор объединения (и его использование с LINQ)

Привет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...