【问题标题】:LINQ to Entities does not recognize the method 'System.Object get_Item(System.String)' methodLINQ to Entities 无法识别方法“System.Object get_Item(System.String)”方法
【发布时间】:2019-08-18 16:45:17
【问题描述】:

在尝试将数据输出到视图时,出现以下错误。 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>
}

我对 c# 很陌生,我遇到的网络搜索都没有解决我的问题。有人可以帮我解决这个问题吗?谢谢!

【问题讨论】:

    标签: c# asp.net linq-to-entities


    【解决方案1】:

    这意味着它无法将Session["UserId"] 翻译成SQL(它不够聪明地将值从集合中提取出来)。我建议在使用之前将其存储在一个值中:

    var currentUserId = (int)Session["UserId"];
    var results = response
                .Where(r => r.UserId == currentUserId);
    

    【讨论】:

    • 这适用于任何无法转换为 SQL 的表达式。除了 SqlFunctions 帮助器和其他一些东西的用法之外,LINQ 语句通常应该主要由 LINQ 语法和常量值组成。只是要记住的事情。
    • 查看docs.microsoft.com/en-us/dotnet/framework/data/adonet/ef/… 和一些同级文章,了解 .NET 如何将某些方法调用转换为各种 SQL 语句。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-07
    • 2012-04-22
    • 1970-01-01
    • 2017-01-02
    • 1970-01-01
    相关资源
    最近更新 更多