Question

J'ai suivantes ActionResult dans un ASP.NET MVC 3 projet:

public ActionResult Index(string searchWord, GridSortOptions gridSortOptions, int? page)
{
    var userListModel = new PagedViewModel<UserModel>
    {
        ViewData = ViewData,
        Query = conn.Query<UserModel>("select Id, Login, Firstname, Lastname from User").AsQueryable(),
        GridSortOptions = gridSortOptions,
        DefaultSortColumn = "Id",
        Page = page,
        PageSize = 20
    }
    .AddFilter("searchWord", searchWord, u => u.Login.Contains(searchWord) || u.Firstname.Contains(searchWord) || u.Lastname.Contains(searchWord))
    .Setup();

    return View(userListModel);
}
  • Le GridSortOptions et PagedViewModel classes sont de MVCContrib comme le point de vue est à l'aide de la Grille de MVCContrib pour afficher les données.
  • conn est une norme SQLConnection de parler à une base de données SQL server.
  • conn.La requête est une occurrence de SQLConnection méthode d'extension fournis par Dapper qui je suis aide pour obtenir les données.
  • La propriété de Requête rempli dans le PagedViewModel est un IQueryable type

Si searchWord est nul tout fonctionne bien, mais dès que vous ajoutez un searchWord la MVCContrib Grille tombe dessus avec un "Objet de référence non définie à une instance d'un objet' erreur.Il fonctionne si je supprime le .Contient) à partir de la AddFilter méthode comme ceci:

.AddFilter("searchWord", searchWord, u => u.Login == searchWord)

Quelqu'un connait un moyen de contourner cela, ou pourquoi je ne peux pas utiliser Contient avec la Dapper IQueryable?

Merci

Edit:

Merci à Sam de répondre à cette fixe:

.AddFilter("searchWord", searchWord, u => (!string.IsNullOrEmpty(u.Login) && u.Login.Contains(searchWord))
Était-ce utile?

La solution

Ce n'est pas vraiment une Dapper question.

Vous avez une collection d'objets, certains d'entre eux ont null propriétés et vous essayez de frapper avec un .Contains

var users = new UserModel[] { new UserModel(); } 
// Login is null 
users.AsQueryable().where(u => u.Login.Contains("bob")); // kaboom
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top