Domanda

Ho il seguente Progetto AptionResult in ASP.NET MVC 3:

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 classi di Gridsortoptions e PageViewModel View sono da MVCContrib in quanto la vista utilizza La griglia da MvcContrib per visualizzare i dati.
  • CONN è un SQLConnection standard che parla con un database SQL Server.
  • Conn.Query è un metodo di estensione SQLConnection fornito da Dapper che sto usando per ottenere i dati.
  • La proprietà della query è stata riempita nel PageDviewModel è un tipo iqueryable

    Se il searchword è nullo tutto funziona bene, ma non appena si aggiunge una ricerca sulla griglia MvCContrib cade con un "riferimento all'oggetto non impostato su un'istanza di un oggetto".Funziona se rimuovo il .Contains) dal metodo AddFilter come questo:

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

    Qualcuno conosce un modo per aggirare questo, o perché non posso usare contiene con il dapper iqueryable?

    Grazie

    Modifica:

    Grazie alla risposta di Sam questo la corregge:

    .AddFilter("searchWord", searchWord, u => (!string.IsNullOrEmpty(u.Login) && u.Login.Contains(searchWord))
    
    .

È stato utile?

Soluzione

Questo non è davvero un problema dapper.

Hai una raccolta di oggetti, alcuni di loro hanno proprietà null e stai cercando di colpirli con un .Contains

var users = new UserModel[] { new UserModel(); } 
// Login is null 
users.AsQueryable().where(u => u.Login.Contains("bob")); // kaboom
.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top