2015-12-22 6 views
1

У меня действительно глупый вопрос, но я не могу найти себе, почему Visual Studio дает мне эту ошибку.Нельзя ссылаться на переменную модели на контроллере Где инструкция

Я собрал фильтр Текстовое поле в моем представлении, и я передаю String моему контроллеру, чтобы сделать оператор where, используя одну из моих строк модели, и я получаю ошибку на моей модели. Строка говорит, что это не Invocable .. Это на мой взгляд часть текстового поля

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

Это моя модель:

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

 
     
 
    }

Это мой контекст:

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

И это мой метод Index контроллер, который дает мне ошибку на моем где заявление

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

именно эта часть: db.Pos.Where (s => s.Descripcion (searchString)); он говорит, что «Описание» не является объектом-невидимым

Может кто-нибудь объяснить мне, почему у меня есть эта проблема или что я сделал не так? Любая помощь будет оценена

+0

да, но если я добавлю заявление после слова «DEscripcion», например .equals или содержит, я получаю erro на всем statemt, говоря: «Я не могу преобразовать тип System.Linq.iquery theres уже явное преобразование» –

+0

@ ArturoMartinez Можете ли вы включить свой код для ArponclientPosContext? – thinklarge

+0

, конечно, @thinklarge, позвольте мне добавить его –

ответ

1

Вы пытаетесь сравнить Descripcion со своим поискомString? Вы хотите что-то идеальное совпадение? Если так, используйте .Equals(). Если вы хотите, чтобы он искал Descripcion для всего, что «Содержит» этот текст, используйте .Contains. Если вы хотите быть нечувствительным к типу, тогда используйте .ToLower по обоим значениям внутри Where.

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 Я использовал для этого.

+0

не идеальное совпадение, я бы хотел, чтобы это выглядело, если строка поиска «Caf» отобразит каждый элемент в том месте, где statemt начинается с caf ... и т.д. , но он дает мне invocable ошибку объекта в «Descripcion» на моем, где выражение Также, если я использую equals, он дает e ошибку, говорящую, что я не могу сменить мое предложение. У меня уже есть преобразованное предложение. –

+0

@ArturoMartinez Я предполагаю, что db .Pos имеет тип List . Если он имеет тип Pos, вы не можете этого сделать. – thinklarge

+0

У меня это как dbSet, я только что отредактировал, поэтому мой контекст был загружен @thinklarge –

Смежные вопросы