在控制器Where

时间:2015-12-22 19:34:59

标签: c# html asp.net-mvc razor filter

我有一个非常愚蠢的问题,但我无法知道为什么Visual Studio会给我这个错误。

我在我的视图中制作了一个过滤器文本框,我将String传递给我的控制器,使用我的一个模型字符串制作一个where语句,我得到了我的模型String上的错误,说它不是Invocable .. 这是我文本框的View部分



@using (Html.BeginForm())
{ 
<p>
    Filtro Descripcion: @Html.TextBox("SearchString")
    <input type="submit" value="Seach" />
</p>
}
&#13;
&#13;
&#13;

这是我的模特:

&#13;
&#13;
 public partial class Pos
    {
        public System.DateTime Fecha { get; set; }
        public string Rid { get; set; }
        public string Pdv { get; set; }
        public string Pla { get; set; }
        public string Descripcion { get; set; }
        public decimal Total { get; set; }
        public int Cantidad { get; set; }

        
    }
&#13;
&#13;
&#13;

这是我的背景:

&#13;
&#13;
 public partial class ArponClientPosContext : DbContext
    {
        static ArponClientPosContext()
        {
            Database.SetInitializer<ArponClientPosContext>(null);
        }

        public ArponClientPosContext()
            : base("Name=ArponClientPosContext")
        {
        }

        public DbSet<Pos> Pos { get; set; }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Configurations.Add(new PosMap());
        }
    }
}
&#13;
&#13;
&#13;

这是我的控制器索引方法,它在我的where语句中给出了错误

&#13;
&#13;
 public ActionResult Index(string searchString)
        { 
            var db = new ArponClientPosContext();
            var students = from s in db.Pos
                           select s;
            if (!String.IsNullOrEmpty(searchString))
            {
                db = db.Pos.Where(s => s.Descripcion(searchString));
            }

            return View("~/Views/HomePos/Index.cshtml", db.Pos.ToList());
           
        }
&#13;
&#13;
&#13;

正是这一部分:db.Pos.Where(s =&gt; s.Descripcion(searchString)); 它说&#34;描述&#34;不是一个可调用的对象

有人可以解释我为什么会遇到这个问题或者我做错了什么? 任何帮助都将是apreciated

1 个答案:

答案 0 :(得分:1)

您是否尝试将Descripcion与searchString进行比较?你想要一些完美的搭配吗?如果是这样,请使用.Equals()。如果你想让它在Descripcion中搜索任何&#34;包含&#34;该文本然后使用.Contains。如果您想要对类型不敏感,那么在Where中的两个值上使用.ToLower。

public ActionResult Index(string searchString = "")
    { 
        var db = new ArponClientPosContext();            
        var lowerSearch = searchString.ToLower();
        var students = from s in db.Pos
                   where s.Descripcion.ToLower().Contains(lowerSearch)
                   select s;
        return View("~/Views/HomePos/Index.cshtml", students.ToList());

    }

code我过去经常这样做。