2010-01-14 6 views
0

J'ai un comportement étrange. Le code ci-dessous a fonctionné depuis longtemps mais maintenant je ne sais pas pourquoi je n'ai rien changé, j'ai une exception. Je reçois un employé de ma base de données via Nhibernate, le _model.List a la liste des employés. J'ai une exception sur la ligne juste avant le retour (où je construis le tableau). Je formate les données pour les utiliser dans jqGrid.Exception avec lambda express

L'exception est la suivante: La référence d'objet n'est pas définie sur une instance d'un objet.

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult ListToGrid(string sidx, string sord, int page, int rows) 
{ 
    _model.List = _employeeService.List(); 

    Func<Employee, string> order; 
    switch (sidx.ToUpper()) 
    { 
     case "FIRSTNAME": order = x => x.FirstName; break; 
     case "LASTNAME": order = x => x.LastName; break; 
     default: order = x => x.Login; break; 
    } 

    if (sord.ToUpper() == "ASC") 
     _model.List = _model.List.OrderBy(order).ToList<Employee>(); 
    else 
     _model.List = _model.List.OrderByDescending(order).ToList<Employee>(); 

    var data = _model.List.Select(c => new { id = c.Id, cell = new[] { c.Id.ToString(), c.Login.ToString(), c.FirstName, c.LastName, c.IsActive.ToString() } }).ToArray(); 
    return new JsonResult { Data = new { page = page, records = data.Length, rows = data, total = 1 } };    
} 
+2

Quelle ligne renvoie l'exception? –

+0

@Adam Robinson: "J'ai une exception sur la ligne juste avant le retour (où je construis le tableau)." – jason

Répondre

4

Donc, vous dites que cette ligne

var data = _model.List.Select(c => new { id = c.Id, cell = new[] { 
    c.Id.ToString(), 
    c.Login.ToString(), 
    c.FirstName, 
    c.LastName, 
    c.IsActive.ToString() 
} }).ToArray(); 

lance une exception. Ensuite, il semblerait très probable que c.Id, c.Login ou c.IsActive est nul pour au moins un c dans _model.List car ce sont les seules propriétés de c pour lesquelles une déréférence est nécessaire. Ce sont vos principaux coupables alors commencez à vérifier vos données.

+0

Haaaaa vous avez raison! comment puis-je gérer cela parce que certains champs peuvent être nuls .... –

+0

.Where (c => c! = null) .Select() –

+0

Eh bien, l'approche simple est de remplacer, par exemple, 'c.Id.ToString () 'par' c.Id == null? String.Empty: c.Id.ToString() 'et répète pour chacune des propriétés éventuellement nulles. Bien sûr, vous pouvez envisager d'intégrer cette logique dans une méthode. – jason

1

Selon toute probabilité, vous avez une ligne dans votre base de données avec Id, Login ou IsActive défini sur null. Pouvez-vous poster l'ensemble de la pile pour plus d'informations?