gpt4 book ai didi

c# - 将 SQL 查询转换为 LINQ - 不工作

转载 作者:行者123 更新时间:2023-11-30 14:45:07 25 4
gpt4 key购买 nike

我要转换的 SQL 查询是:

select p.PhoneNumber_Id, p.State, p.Created
from PhoneNumberServiceItems p
join PhoneNumbers on p.PhoneNumber_Id = PhoneNumbers.Id
inner join (
select PhoneNumber_Id, max(Created) as MaxDate
from PhoneNumberServiceItems
group by PhoneNumber_Id
) tm on p.PhoneNumber_Id = tm.PhoneNumber_Id and p.Created = tm.MaxDate
where PhoneNumbers.NumberRangeId = {Id}

我最终得到的 LINQ 代码如下,但这不起作用:

 var res =
from serviceItems in _db.PhoneNumberServiceItems
join nums in _db.PhoneNumbers on serviceItems.PhoneNumber_Id equals nums.Id
where nums.NumberRangeId == id
join serviceGroup in (from ps in _db.PhoneNumberServiceItems
group ps by ps.PhoneNumber_Id into numGroup

//join tm in _db.PhoneNumbers on psg.FirstOrDefault().PhoneNumber_Id equals tm.Id
select new
{
NumId = numGroup.FirstOrDefault().PhoneNumber_Id,
MaxDate = numGroup.Max(i => i.Created)
}) on new { PNId = serviceItems.PhoneNumber_Id, serviceCreated = serviceItems.Created } equals new { PNId = serviceGroup.NumId, serviceCreated = serviceGroup.MaxDate }
select new
{
State = serviceItems.State,
NumId = serviceGroup.NumId,
Created = serviceGroup.MaxDate
};

我知道我的 LINQ 是错误的,但我无法确定我的做法有何不同。任何帮助将不胜感激。

编辑:这是从 LINQ 生成的编译 SQL

SELECT 
[Extent1].[State] AS [State],
[Project4].[C1] AS [C1],
[Project4].[C2] AS [C2]
FROM [dbo].[PhoneNumberServiceItems] AS [Extent1]
INNER JOIN [dbo].[PhoneNumbers] AS [Extent2] ON [Extent1].[PhoneNumber_Id] = [Extent2].[Id]
INNER JOIN (SELECT
[Project3].[C1] AS [C1],
(SELECT
MAX([Extent5].[Created]) AS [A1]
FROM [dbo].[PhoneNumberServiceItems] AS [Extent5]
WHERE [Project3].[PhoneNumber_Id] = [Extent5].[PhoneNumber_Id]) AS [C2]
FROM ( SELECT
[Distinct1].[PhoneNumber_Id] AS [PhoneNumber_Id],
(SELECT TOP (1)
[Extent4].[PhoneNumber_Id] AS [PhoneNumber_Id]
FROM [dbo].[PhoneNumberServiceItems] AS [Extent4]
WHERE [Distinct1].[PhoneNumber_Id] = [Extent4].[PhoneNumber_Id]) AS [C1]
FROM ( SELECT DISTINCT
[Extent3].[PhoneNumber_Id] AS [PhoneNumber_Id]
FROM [dbo].[PhoneNumberServiceItems] AS [Extent3]
) AS [Distinct1]
) AS [Project3] ) AS [Project4] ON ([Extent1].[PhoneNumber_Id] = [Project4].[C1]) AND ([Extent1].[Created] = [Project4].[C2])
WHERE [Extent2].[NumberRangeId] = {id}

最佳答案

这是您的查询的 linq 等价物。

var res = from s in PhoneNumberServiceItems
join p in PhoneNumbers on s.PhoneNumber_Id equals p.Id
join tm in ( from p1 in PhoneNumberServiceItems
group p1 by p1.PhoneNumber_Id into p_g
select new {PhoneNumber_Id = p_g.Key,MaxDate = p_g.Max(i=> i.Created) } )
on new {Created = s.Created, PhoneNumber_Id = s.PhoneNumber_Id}
equals new { Created = tm.MaxDate, PhoneNumber_Id = tm.PhoneNumber_Id}
where p.NumberRangeId == {Id}
select new
{
s.PhoneNumber_Id,
s.State,
s.Created
};

关于c# - 将 SQL 查询转换为 LINQ - 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55138284/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com