2014-04-21 14 views
5

Tôi mới sử dụng LINQ và đang cố gắng tạo tìm kiếm sẽ tìm kiếm theo số biểu đồ và hiển thị kết quả trong chế độ xem tác vụ mới. Khi chạy mã tôi nhận được lỗi "DbComparisonExpression yêu cầu đối số với các loại so sánh". Tôi tin rằng điều này có liên quan đến loại tìm kiếm là chuỗi và số biểu đồ là int, nhưng tôi không chắc chắn cách khắc phục sự cố. Mọi sự trợ giúp sẽ rất được trân trọng!DbComparisonExpression yêu cầu đối số với các loại có thể so sánh

Bộ điều khiển:

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

mẫu:

public class NewListModel 
{ 
    public int ChartNumber { get; set; } 

    public string FirstName { get; set; } 
    public string LastName { get; set; } 

} 

Xem:

@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> 

} 

New khiển

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 
      } 
      } 
+0

là 'ChartNumber' một chuỗi hoặc Int? hoặc làm một số thích hợp 'Casting' hoặc sử dụng so sánh thích hợp ví dụ khi so sánh như đối tượng sử dụng object.Equals, othewise thử thay đổi r.ChartNumber = Convert.ToInt32 (searchTerm) – MethodMan

+0

hoặc thay đổi truy vấn của bạn để sử dụng' == 'khi làm so sánh ở phía bên trái, EF dường như không tính đến các toán tử chuyển đổi loại của bạn. – MethodMan

Trả lời

2

Chuyển đổi sự xâm nhập của các số đến một int:

int chartNo = 0; 
if (searchTerm == null || Int32.TryParse(searchTerm, out chartNo)) { 
    var model = db.Patient 
     .Where(r => searchTerm == null || r.ChartNumber == chartNo) 
     .Select(...); 
    return ...; 
} else { 
    // Invalid number entered 
} 
+0

Nhập vào logic này và bây giờ nhận được 'sử dụng biến cục bộ chưa được gán' chartNo ' – dc922

+0

Điều này có thể đơn giản được sửa bằng cách khởi tạo nó bằng '0'. Vui lòng xem ví dụ đã chỉnh sửa của tôi. –

Các vấn đề liên quan