在mvc4中使用谓词构建器进行搜索

时间:2013-10-29 17:34:46

标签: asp.net-mvc linq asp.net-mvc-4 predicate

下面是我使用谓词构建器进行搜索的方法,在visual studio中没有显示错误,但问题是下面的代码没有执行。

public JsonResult GetSearchedGraph(string searchItem, string itemTypeEnum)
        {

            var pre = PredicateBuilder.True<Graph>();
           pre.And(m => m.isHidden == false && m.ItemType!="FOLDER");
            if (!String.IsNullOrEmpty(searchItem))
           {
               pre.And(m => m.GraphItemTitle.ToUpper().Contains(searchItem.ToUpper()));
            }
            if (!String.IsNullOrEmpty(itemTypeEnum))
            {
                pre.And(m => m.ItemType == itemTypeEnum);
            }

            var searchGraph = from m in db.Graphs.AsQueryable() select m;
           searchGraph = db.Graphs.Where(pre);

           return Json(searchGraph.ToList(), JsonRequestBehavior.AllowGet);
        }

我没有通过使用此方法得到任何搜索结果这个代码有什么问题?

1 个答案:

答案 0 :(得分:0)

嗯,你只需做正确的作业。

因为pre.And()不会影响pre

var pre = PredicateBuilder.True<Graph>();
//assign result of pre.And(xxx) to pre
pre = pre.And(m => m.isHidden == false && m.ItemType!="FOLDER");
if (!String.IsNullOrEmpty(searchItem))
{
     //same
     pre = pre.And(m => m.GraphItemTitle.ToUpper().Contains(searchItem.ToUpper()));
}
if (!String.IsNullOrEmpty(itemTypeEnum))
{
    //same
    pre = pre.And(m => m.ItemType == itemTypeEnum);
}