我正在使用 LINQPad 将 SQL 转换为 LINQ,并在此过程中学习 LINQ。不过,我遇到了一些问题,希望有人可以查看我生成的 LINQ 代码,看看我是否走在正确的轨道上?
这是我的 SQL 代码:
Select Count(Convert(varchar(250),
Comment.CommentId)) as Num,
DiscussionBoard.ItemName,
Status.Status,
Status.Sequence
From Comment inner join status on Comment.StatusID = Status.StatusID
inner join DiscussionBoard on Comment.DiscussionBoardID
= DiscussionBoard.DiscussionBoardID
WHERE discussionboard.DiscussionBoardID
= '3ab7c139-317c-4450-9823-45a40ea6d0ff'
Group By status.Status,
Status.Sequence,
DiscussionBoard.ItemName
ORDER BY Status ASC
这是我迄今为止编写的 LINQ 代码。请耐心等待,我刚刚学习 LINQ,还没有完全理解它。任何指示将不胜感激:
from Comment in Comments
where DiscussionBoard.DiscussionBoardID == '3ab7c139-317c-4450-9823-45a40ea6d0ff'
join Status in Statuses on Comment.StatusID equals Statuses.StatusID
join DiscussionBoard in DiscussionBoards on Comment.DiscussionBoardID equals DiscucussionBoard.DiscussionBoardID
group CountGroup by new {
Status.Status,
Status.Sequence,
DiscussionBoard.DiscussionBoardID
}
select new
{
Count = CountGroup.Count(),
DiscussionBoard.ItemName,
Status.Status,
Status.Sequence
}
最佳答案
group x by y
该片段结束查询。
我想你的意思是:
group x by y into z
此片段继续查询范围内的 z。并从范围中删除所有先前的范围变量。 z 是 IGrouping<y, x>
,也就是说键类型是y的类型,组元素类型是x的类型。
这是我对您的查询的回答:
from comment in Comments
where comment.DiscussionBoard.DiscussionBoardID == '3ab7c139-317c-4450-9823-45a40ea6d0ff'
let status = comment.Status
let board = comment.DiscussionBoard
group comment by new {
status.Status,
status.Sequence,
board.ItemName
} into g
select new
{
Count = g.Count(),
ItemName = g.Key.ItemName,
Status = g.Key.Status,
Sequence = g.Key.Sequence
}
打开此查询的另一种方法是:
from board in DiscussionBoards
where board.DiscussionBoardID == '3ab7c139-317c-4450-9823-45a40ea6d0ff'
from comment in board.Comments
关于sql - 我在 SQL 到 LINQ 转换中做错了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18405410/