は私が働くこのSQLクエリを持って設定返しますこれをEFで使用するLinqクエリに変換しようとしています。SQL>はLINQのは、SQLに、SQLクエリは動作しますが、LINQ to SQLは、空のデータが
私は、空の結果セットを返す
var query =
from dbostats in _db.StatLines
join dbogames in _db.Games on dbostats.GameId equals dbogames.GameId
join dboseasons in _db.Seasons on dbogames.Season.SeasonId equals dboseasons.SeasonId
where dbostats.PlayerId == player.PlayerId
group dbostats.Points by dboseasons.Year into g
select new
{
Year = g.Key,
Points = g.Sum()
};
playerAndStatLines.StatLinesBySeason =
query
.ToList()
.Select(r => new StatsBySeason
{
Season = r.Year,
Points = r.Points
});
を持っています。私はSQLの生成を表示すると
、それは予想通り、この
SELECT
[GroupBy1].[K1] AS [Year],
[GroupBy1].[A1] AS [C1]
FROM (SELECT
[Extent3].[Year] AS [K1],
SUM([Extent1].[Points]) AS [A1]
FROM [dbo].[StatLines] AS [Extent1]
INNER JOIN [dbo].[Games] AS [Extent2] ON [Extent1].[GameId] = [Extent2].[GameId]
INNER JOIN [dbo].[Seasons] AS [Extent3] ON [Extent2].[Season_SeasonId] = [Extent3].[SeasonId]
WHERE ([Extent1].[Discriminator] IN (N'StatsBySeason',N'StatLines')) AND ([Extent1].[PlayerId] = 3)
GROUP BY [Extent3].[Year]
) AS [GroupBy1]
だ、私のDBに対して実行時に空の結果セットを返します。
問題は、このビットのようだ:
([Extent1].[Discriminator] IN (N'StatsBySeason',N'StatLines')) AND
私はこれを取り出し、生成されたクエリを実行した場合、私は2016年、56の結果を取り戻します。
このExtent1.Discriminatorとは何ですか、それはなぜ私のlinqクエリから生成していますか?
私のモデルクラス:
public class PlayerAndStatLines
{
public PlayerWithTeam PlayerWithTeam { get; set; }
public IEnumerable<StatsBySeason> StatLinesBySeason { get; set; }
}
public class Season
{
public int SeasonId { get; set; }
public int Year { get; set; }
}
public class Game
{
public int GameId { get; set; }
public int HomeTeamId { get; set; }
public int AwayTeamId { get; set; }
public int HomeScore { get; set; }
public int AwayScore { get; set; }
public DateTime DatePlayed { get; set; }
public GameType GameType { get; set; }
public int? PlayoffGameNumber { get; set; }
public Season Season { get; set; }
}
public class StatLines
{
public int StatLinesId { get; set; }
public int GameId { get; set; }
public int PlayerId { get; set; }
public int TeamId { get; set; }
public int Points { get; set; }
public int DefensiveRebounds { get; set; }
public int OffensiveRebounds { get; set; }
public int Assists { get; set; }
public int Turnovers { get; set; }
public int Minutes { get; set; }
public int Steals { get; set; }
public int Blocks { get; set; }
public int Fouls { get; set; }
public int ThreePointFieldGoalsAttempted { get; set; }
public int ThreePointFieldGoalsMade { get; set; }
public int TwoPointFieldGoalsAttempted { get; set; }
public int TwoPointFieldGoalsMade { get; set; }
public int FreeThrowsMade { get; set; }
public int FreeThrowsAttempted { get; set; }
public bool Started { get; set; }
}
public class StatsBySeason : StatLines
{
public int Season { get; set; }
public string SeasonYears => Season + "/" + (Season + 1);
}
私は、次のSQLを実行した場合:
select Discriminator from dbo.StatLines
を、私は戻って2行を取得するには、両方の空。
ありがとうございます。
Discriminatorは、モデルが継承階層を構成するときに、オブジェクトの具体的な型を保持するためにEntity Frameworkによって追加された列です。モデルクラスを質問に追加できますか? –
あなたの 'StatsBySeason'クラスが' StatLines'エンティティを継承しているようですね。 –
@Ivan Stoev - これは正しいです。モデルクラスをOPに追加します – Stuart