ОШИБКА
Unable to cast the type 'System.Nullable`1' to type 'System.Object'.
LINQ to Entities only supports casting Entity Data Model primitive types.
Это ошибка, которую я получаю.
Контроллер -
public ActionResult FixturesAll()
{
teamMgr = new TeamManager();
fixtureMgr = new FixtureManager();
var team = teamMgr.GetTeams();
var viewModel = new TeamIndexViewModel()
{
Teams = team.ToList(),
NumberOfTeams = team.Count()
};
var fixtures = from fixtures in Oritia_entities.Fixtures
where fixtures.SeasonId == seasionID
select new FixtureModel
{
Team1 = "",
Team2 = "",
Winners = (fixtures.TeamWon+""),
FirstBattingTeam = (fixtures.FirstBattingTeam+""),
SecondBattingTeam = (fixtures.SecondBattingTeam+""),
Team1Score = fixtures.Team1Score + "",
Team1Wickets = fixtures.Team1Wickets + "",
Team2Score = fixtures.Team2Score + "",
Team2Wickets = fixtures.Team2Wickets + ""
};
ViewData["Fixtures"] = fixtures;
return View(viewModel);
}
Частичный вид
<%@ Control Language="C#" Inherits=
"System.Web.Mvc.ViewUserControl<IEnumerable<DataAccess.FixtureModel>>" %>
<table>
<% foreach (var item in ViewData["Fixtures"]
as IEnumerable<DataAccess.FixtureModel>) // Here I am getting the error
{ %>
<tr>
<td>
<%: item.Team1 %>
</td>
<td>
<%: item.Team2 %>
</td>
</tr>
</table>
Просмотр
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master"
Inherits="System.Web.Mvc.ViewPage<FunBox.ViewModels.TeamIndexViewModel>" %>
<ul>
<% foreach (string team in Model.Teams)
{ %>
<li><a href="<%: team.ToString() %>/">
<%: team.ToString() %></a> </li>
<% } %>
</ul>
<div>
<% Html.RenderPartial("FixturesAll",ViewData["Fixtures"]); %>
</div>
Сложные классы
public class TeamIndexViewModel
{
public int NumberOfTeams { get; set; }
public List<String> Teams { get; set; }
}
public class FixtureModel
{
public string Team1 { get; set; }
public string Team2 { get; set; }
public string Winners { get; set; }
public string Team1Score { get; set; }
public string Team1Wickets { get; set; }
public string Team2Score { get; set; }
public string Team2Wickets { get; set; }
public string FirstBattingTeam { get; set; }
public string SecondBattingTeam { get; set; }
}
Выход sp_help Fixtures
Id bigint (pk)
TeamID1 bigint
TeamID2 bigint
TeamWon bigint
Date datetime
SeasonId bigint
ManOfTheMatch bigint
FirstBattingTeam bigint
SecondBattingTeam bigint
ResultDescription nvarchar
Team1Score bigint
Team2Score bigint
Team1Wickets bigint
Team2Wickets bigint
Это моя общая структура, и я получаю вышеуказанную ошибку. Я искал googled, но я не получил точное решение для этого. Любая помощь приветствуется.
Спасибо всем за то, что помогли мне и моей особой благодарностью Jon Skeet за предоставленную идею
См. мой обновленный запрос
var data = from fixtures in Oritia_entities.Fixtures
join t1 in Oritia_entities.Teams on new { ID = fixtures.TeamID1 } equals new { ID = t1.ID }
join t2 in Oritia_entities.Teams on new { ID = fixtures.TeamID2 } equals new { ID = t2.ID }
where fixtures.SeasonId == seasionID
select new FixtureModel
{
Team1 = t1.TeamName,
Team2 = t2.TeamName,
Winners = SqlFunctions.StringConvert((double)(fixtures.TeamWon ?? 1)),
FirstBattingTeam = SqlFunctions.StringConvert((double)(fixtures.FirstBattingTeam ?? 1)),
SecondBattingTeam = SqlFunctions.StringConvert((double)(fixtures.SecondBattingTeam ?? 1)),
Team1Score = SqlFunctions.StringConvert((double)(fixtures.Team1Score ?? 1)),
Team1Wickets = SqlFunctions.StringConvert((double)(fixtures.Team1Wickets ?? 1)),
Team2Score = SqlFunctions.StringConvert((double)(fixtures.Team2Score ?? 1)),
Team2Wickets = SqlFunctions.StringConvert((double)(fixtures.Team2Wickets ?? 1))
};
Я использовал SqlFunctions.StringConvert для конвертирования в строку и давал ей возможность работать. Спасибо всем.