DbComparisonExpression requiert des arguments comparables types
Je suis nouveau à l'aide de Linq et suis en train de créer une recherche par numéro de dossier et afficher les résultats dans une nouvelle action de la vue. Lors de l'exécution du code, j'obtiens le message d'erreur "DbComparisonExpression requiert des arguments avec des types comparables". Je crois que cela a quelque chose à voir avec le type de recherche étant de la chaîne graphique et d'un numéro de type int, mais je ne suis pas sûr de la façon de résoudre le problème. Toute aide serait grandement appréciée!
Contrôleur:
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);
}
Modèle:
public class NewListModel
{
public int ChartNumber { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
}
Vue:
@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>
}
Nouveau contrôleur
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
}
}
est
ou changer votre requête à utiliser
ChartNumber
un string ou Int? soit faire une bonne Casting
ou utilisez la comparaison par exemple lorsque l'on compare des objets ressemblant à utiliser l'objet.D'égal à égal, autrement essayez de changer votre r.ChartNumber = Convert.ToInt32(searchTerm)ou changer votre requête à utiliser
==
lorsque l'on fait la comparaison sur le côté gauche, l'EF ne semble pas prendre en compte votre type d'opérateurs de conversion.
OriginalL'auteur dc922 | 2014-04-21
Vous devez vous connecter pour publier un commentaire.
Convertir l'entrée du numéro à un
int
:Cela peut simplement être fixé par l'initialiser avec
0
. Veuillez voir mon édité exemple.OriginalL'auteur Olivier Jacot-Descombes