C# 但是,当在列表中设置数据,然后查询IQueryable(via.AsQueryable())时,这实际上会导致崩溃。因此,纯LINQ和EntityFramework在这方面表现不同!这里有一个要点来说明两者的区别:我已经放弃了模仿/假装EF。只有集成测试才
C# 但是,当在列表中设置数据,然后查询IQueryable(via.AsQueryable())时,这实际上会导致崩溃。因此,纯LINQ和EntityFramework在这方面表现不同!这里有一个要点来说明两者的区别:我已经放弃了模仿/假装EF。只有集成测试才,c#,sql-server,entity-framework,linq,entity-framework-6,C#,Sql Server,Entity Framework,Linq,Entity Framework 6,但是,当在列表中设置数据,然后查询IQueryable(via.AsQueryable())时,这实际上会导致崩溃。因此,纯LINQ和EntityFramework在这方面表现不同!这里有一个要点来说明两者的区别:我已经放弃了模仿/假装EF。只有集成测试才能证明这一点。 var result = dataContext.GetQueryable<PlayedGame>() .Where(playedGame => playedGame.Id == somePlayed
但是,当在列表中设置数据,然后查询IQueryable(via.AsQueryable())时,这实际上会导致崩溃。因此,纯LINQ和EntityFramework在这方面表现不同!这里有一个要点来说明两者的区别:我已经放弃了模仿/假装EF。只有集成测试才能证明这一点。
var result = dataContext.GetQueryable<PlayedGame>()
.Where(playedGame => playedGame.Id == somePlayedGameId)
.Select(x => new
{
Name = x.PlayerGameResults.FirstOrDefault() != null ? x.PlayerGameResults.FirstOrDefault().Player.Name : null,
Id = x.PlayerGameResults.FirstOrDefault() != null ? x.PlayerGameResults.FirstOrDefault().Player.Id : 0
})
.FirstOrDefault();
SELECT
[Limit5].[Id] AS [Id],
[Limit5].[C1] AS [C1],
[Limit5].[C2] AS [C2]
FROM
(SELECT TOP (1)
[Project11].[Id] AS [Id],
CASE WHEN ([Project11].[C1] IS NOT NULL) THEN [Project11].[Name] END AS [C1],
CASE WHEN ([Project11].[C2] IS NOT NULL) THEN [Project11].[C3] ELSE 0 END AS [C2]
FROM
(SELECT
[Project9].[Id] AS [Id],
[Project9].[Name] AS [Name],
[Project9].[C1] AS [C1],
[Project9].[C2] AS [C2],
(SELECT TOP (1)
[Extent6].[PlayerId] AS [PlayerId]
FROM [dbo].[PlayerGameResult] AS [Extent6]
WHERE [Project9].[Id] = [Extent6].[PlayedGameId]) AS [C3]
FROM ( SELECT
[Project8].[Id] AS [Id],
[Project8].[Name] AS [Name],
[Project8].[C1] AS [C1],
[Project8].[C2] AS [C2]
FROM ( SELECT
[Project6].[Id] AS [Id],
[Project6].[Name] AS [Name],
[Project6].[C1] AS [C1],
(SELECT TOP (1)
[Extent5].[Id] AS [Id]
FROM [dbo].[PlayerGameResult] AS [Extent5]
WHERE [Project6].[Id] = [Extent5].[PlayedGameId]) AS [C2]
FROM ( SELECT
[Project5].[Id] AS [Id],
[Extent4].[Name] AS [Name],
[Project5].[C1] AS [C1]
FROM (SELECT
[Project3].[Id] AS [Id],
[Project3].[C1] AS [C1],
(SELECT TOP (1)
[Extent3].[PlayerId] AS [PlayerId]
FROM [dbo].[PlayerGameResult] AS [Extent3]
WHERE [Project3].[Id] = [Extent3].[PlayedGameId]) AS [C2]
FROM ( SELECT
[Project2].[Id] AS [Id],
[Project2].[C1] AS [C1]
FROM ( SELECT
[Extent1].[Id] AS [Id],
(SELECT TOP (1)
[Extent2].[Id] AS [Id]
FROM [dbo].[PlayerGameResult] AS [Extent2]
WHERE [Extent1].[Id] = [Extent2].[PlayedGameId]) AS [C1]
FROM [dbo].[PlayedGame] AS [Extent1]
WHERE [Extent1].[Id] = @p__linq__0
) AS [Project2]
) AS [Project3] ) AS [Project5]
LEFT OUTER JOIN [dbo].[Player] AS [Extent4] ON [Project5].[C2] = [Extent4].[Id]
) AS [Project6]
) AS [Project8]
) AS [Project9]
) AS [Project11]
) AS [Limit5]
var result = dataContext.GetQueryable<PlayedGame>()
.Where(player => player.Id == testPlayerWithNoPlayedGames.Id)
.Select(x => new
{
Name = x.PlayerGameResults.FirstOrDefault().Player.Name,
Id = (int?)x.PlayerGameResults.FirstOrDefault().Player.Id
}).FirstOrDefault();
var result = (from playerGame in dataContext.GetQueryable<PlayedGame>()
where playerGame.Id == testPlayerWithNoPlayedGames.Id
let player = x.PlayerGameResults.FirstOrDefault().Player
select new
{
Name = player.Name,
Id = (int?)player.Id
}).FirstOrDefault();
var result = dataContext.GetQueryable<PlayerGameResults>()
.Where(player => player.Player.Id == testPlayerWithNoPlayedGames.Id)
.Select(x => new {
Name = x.Player.Name,
Id = x.Player.Id,
})
.FirstOrDefault();
.Select(x => new AchievementRelatedPlayedGameSummary
{
//--only pull records where the Player had rank -42 (i.e. none of the PlayerGameResults)
WinningPlayerName = x.PlayerGameResults.FirstOrDefault(y => y.GameRank == -42).Player.Name,
WinningPlayerId = x.PlayerGameResults.FirstOrDefault(y => y.GameRank == -42).Player.Id
})
OUTER APPLY (SELECT TOP (1)
[Extent2].[PlayerId] AS [PlayerId]
FROM [dbo].[PlayerGameResult] AS [Extent2]
WHERE ([Filter1].[Id] = [Extent2].[PlayedGameId]) AND (-42 = [Extent2].[GameRank]) ) AS [Limit1]
LEFT OUTER JOIN [dbo].[Player] AS [Extent3] ON [Limit1].[PlayerId] = [Extent3].[Id]) AS [Project2]
OUTER APPLY (SELECT TOP (1)
[Extent4].[PlayerId] AS [PlayerId]
FROM [dbo].[PlayerGameResult] AS [Extent4]
WHERE ([Project2].[Id] = [Extent4].[PlayedGameId]) AND (-42 = [Extent4].[GameRank]) ) AS [Limit2]
var result = dataContext.GetQueryable<PlayerGameResults>()
.Where(x => x.PlayedGame.Id == playedGameId && x.GameRank == -42)
.Select(x => new AchievementRelatedPlayedGameSummary
{
WinningPlayerName = x.Player.Name,
WinningPlayerId = x.Player.Id
}).FirstOrDefault();