При попытке вывести данные в представление я получаю следующую ошибку. LINQ to Entities не распознает метод «System.Object get_Item(System.String)», и этот метод нельзя преобразовать в выражение хранилища.
Код контроллера:
public ActionResult Index()
{
return View(ReturnResults());
}
public IQueryable<ShippingRequest> ReturnResults()
{
RatesModel db = new RatesModel();
IQueryable<ShippingRequest> response = db.ShippingRequests;
var results = response
.Where(r => r.UserId == (int)Session["UserId"]);
return results;
}
Код просмотра:
@model IEnumerable<ShippingRatesApp.Models.ShippingRequest>
@{
ViewBag.Title = "Get Rates";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<h3>Shipping Rates</h3>
@{
<table>
@foreach (var rate in Model)
{
<tr>
<td>@rate.ShipRate</td>
</tr>
}
</table>
}
Я очень новичок в С#, и ни один из поисковых запросов в Интернете, с которыми я столкнулся, не решил мою проблему. Может кто-нибудь, пожалуйста, помогите мне разобраться в этом? Спасибо!





Это означает, что он не может перевести Session["UserId"] в SQL (недостаточно умен, чтобы вытащить значение из коллекции). Я бы рекомендовал сохранить это значение перед его использованием:
var currentUserId = (int)Session["UserId"];
var results = response
.Where(r => r.UserId == currentUserId);
Взгляните на docs.microsoft.com/en-us/dotnet/framework/data/adonet/ef/… и некоторые другие статьи, чтобы увидеть, как .NET преобразует вызовы определенных методов в различные операторы SQL.
Это будет верно для любого выражения, которое нельзя преобразовать в SQL. Операторы LINQ обычно должны состоять в основном из синтаксиса LINQ и постоянных значений, помимо использования помощников
SqlFunctionsи некоторых других вещей. Просто кое-что, что нужно иметь в виду.