Sono nuovo nell'utilizzo di Linq e sto cercando di creare una ricerca che cercherà per numero di grafico e visualizzerà i risultati in una nuova vista di azione. Quando eseguo il codice ottengo l'errore "DbComparisonExpression richiede argomenti con tipi comparabili". Credo che questo abbia qualcosa a che fare con il tipo di ricerca essendo il numero della stringa e del grafico int, ma non sono sicuro di come risolvere il problema. Qualsiasi aiuto sarebbe molto apprezzato!DbComparisonExpression richiede argomenti con tipi comparabili
Controller:
public ActionResult Index(string searchTerm = null)
{
var model =
db.Patient
.Where(r => searchTerm == null || r.ChartNumber.Equals(searchTerm))
.Select(r => new NewListModel
{
ChartNumber = r.ChartNumber,
FirstName = r.FirstName,
LastName = r.LastName,
}
);
return View(model);
}
Modello:
public class NewListModel
{
public int ChartNumber { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
}
Vista:
@model IEnumerable<Project.Models.NewListModel>
@{
ViewBag.Title = "Home Page";
}
<form method="get">
<input type="search" name="searchTerm" />
<input type="submit" value="Search by Chart Number" />
</form>
@foreach (var item in Model)
{
<div>
<h4>@item.ChartNumber</h4>
</div>
<div>@item.FirstName</div>
<div>@item.LastName</div>
}
Nuovo regolatore
public ActionResult Index(string searchTerm = null)
{
int chartNo;
if (searchTerm == null || Int32.TryParse(searchTerm, out chartNo)) {
var model = db.Patient
.Where(r => searchTerm == null || r.ChartNumber == chartNo)
.Select(r => new NewListModel
{
ChartNumber = r.ChartNumber,
FirstName = r.FirstName,
LastName = r.LastName,
}
);
return View(model);
} else {
//Invalid number entered
}
}
è 'ChartNumber' una stringa o Int? o esegui un corretto 'Casting' o usa il confronto corretto per esempio quando confronti oggetti simili usano object.Equals, altrimenti prova a cambiare r.ChartNumber = Convert.ToInt32 (searchTerm) – MethodMan
o cambia la tua query per usare' == 'quando fai il confronto sul lato sinistro, EF non sembra prendere in considerazione gli operatori di conversione del tipo. – MethodMan