sql - 我在 SQL 到 LINQ 转换中做错了什么?

标签 sql linq

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

相关文章:

c# - Linq to SQL 分组子关系

c# - 使用 lambda 语法与匿名类型进行多个 linq 连接

c# - 在 LINQ 查询中创建新对象

mysql - "The multi-part identifier could not be bound"与内连接

mysql - 管理数据库的最佳方式(ACCESS)

mysql - 如果表存在 SQL 则删除行

mysql - 在不完整的日期序列上加入下一个日期 +1 天

c# - SQL DataReader 在循环中缺少一行

c# - 获取两个数据行中的键值对差异?

c# - 在 C# 中将多个参数传递给 Func<>