我在ASP.NET MVC 3项目中获得了以下actionResult:

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);
}
.

  • GridSortOptions和PAGETVIEWMODEL类是来自MVCContrib,因为视图使用 来自mvccontrib的网格显示数据。
  • conn是与SQL Server数据库交谈的标准SQLConnection。
  • conn.query是一个由我使用的dapper提供的sqlconnection扩展方法,用于获取数据。
  • 在pagertviewmodel中填写的查询属性是IQueryable类型

    如果searchword是null所有工作正常,但只要添加Searchword,MVCContrib网格将使用“对象引用未设置为对象错误”错误。如果我从这样的addFilter方法中删除了,则可以使用它:

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

    任何人都知道这种方式,或者为什么我不能使用dapper iqueryable?

    感谢

    编辑:

    谢谢Sam的回答这个修复了它:

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

有帮助吗?

解决方案

这不是一个真正的一个问题。

您有一个对象的集合,其中一些有一个属性,并且您正在尝试使用null 击中它们

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top