2

我正在使用 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
}
4

1 回答 1

3
group x by y

这个片段结束一个查询。

我想你的意思是:

group x by y into z

此片段继续查询范围内的 z。并从范围中删除所有先前的范围变量。z 是 an 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
于 2013-08-23T14:37:06.793 回答