MVC5 / EF 6
在我看来
@Html.DropDownList("selectPlayer", (SelectList)ViewBag.Players, "Select Player", new { @class = "form-control" })在我的主计长:
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是从ID在teamDrawPIDs中创建的,我得到了这个错误(在视图页面上,控制器很好):
"LINQ到实体不识别'Int32 IndexOf(Int32)'“
发布于 2014-04-29 12:05:21
根据错误,使用IndexOf()的表达式不能转换为Sql。您可以尝试一些更适合Sql的方法,例如:
entityDB.Players.Where(t => teamDrawPIDs.Contains(t.PID))
.OrderBy(p => p.Last)您还可以使用一些linq来消除for-each,例如,在一个步骤中:
var teamDrawPIDs = teamDrawPlayers.Select(tp => tp.PID).ToList();发布于 2014-04-30 02:16:14
不支持直接cast.So是我的个人建议中的最佳实践,它设置了一个变量,其值为我们将使用的筛选器,以防止此类问题。
https://stackoverflow.com/questions/23364089
复制相似问题