首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >LINQ实体不识别'Int32 IndexOf(Int32)‘方法

LINQ实体不识别'Int32 IndexOf(Int32)‘方法
EN

Stack Overflow用户
提问于 2014-04-29 12:01:48
回答 2查看 621关注 0票数 0

MVC5 / EF 6

在我看来

代码语言:javascript
复制
@Html.DropDownList("selectPlayer", (SelectList)ViewBag.Players, "Select Player", new { @class = "form-control" })

在我的主计长:

代码语言:javascript
复制
if (Convert.ToInt32(mySession.Format) == 4)
{
    List<Int32> teamDrawPIDs = new List<Int32>();
    List<TeamDraw> teamDrawPlayers;
    teamDrawPlayers = entityDB.TeamDraws.Where(t => t.TID == TID).ToList();

    foreach (TeamDraw tPlayer in teamDrawPlayers)
    {
        teamDrawPIDs.Add(tPlayer.PID);
    }

    // only get players in TeamDraw
    ViewBag.Players = new SelectList(entityDB.Players.Where(t => (teamDrawPIDs.IndexOf(t.PID) != -1)).OrderBy(p => p.Last), "PID", "selectListName");
}
else
{
    ViewBag.Players = new SelectList(entityDB.Players.OrderBy(p => p.Last), "PID", "selectListName");
}

mySession.Format不是4岁时,这一切都很好。然而,每当它是4,并且我的ViewBag.Players是从IDteamDrawPIDs中创建的,我得到了这个错误(在视图页面上,控制器很好):

"LINQ到实体不识别'Int32 IndexOf(Int32)'“

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-04-29 12:05:21

根据错误,使用IndexOf()的表达式不能转换为Sql。您可以尝试一些更适合Sql的方法,例如:

代码语言:javascript
复制
entityDB.Players.Where(t => teamDrawPIDs.Contains(t.PID))
                .OrderBy(p => p.Last)

您还可以使用一些linq来消除for-each,例如,在一个步骤中:

代码语言:javascript
复制
var teamDrawPIDs = teamDrawPlayers.Select(tp => tp.PID).ToList();
票数 3
EN

Stack Overflow用户

发布于 2014-04-30 02:16:14

不支持直接cast.So是我的个人建议中的最佳实践,它设置了一个变量,其值为我们将使用的筛选器,以防止此类问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23364089

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档