【问题标题】:How to implement the following nested SQL as Lambda Statement如何将以下嵌套 SQL 实现为 Lambda 语句
【发布时间】:2011-06-14 21:22:11
【问题描述】:

我有以下嵌套的 SQL 语句,我将在 C# 中使用 Lambda 语句做同样的事情我该怎么做?

SQL:

SELECT board.*, (SELECT COUNT(*) from discussion_topic
                 WHERE TopicBoardID=board.BoardID) as TopicCount
FROM `discussion_board` as board

这是我的 2 个表的结构

Table Name: discussion_board
Fields:
BoardID
BoardName
BoardCreatedBy
BoardCreatedDate

Table Name: discussion_topic
Fields:
TopicID
TopicName
TopicCreatedBy
TopicCreatedDate
TopicBoardID

只有 2 个没有外键的简单表,

谢谢!

【问题讨论】:

    标签: c# mysql sql linq lambda


    【解决方案1】:

    这将为您提供一个新的匿名类型,其中将包含董事会记录和讨论主题的数量。

    var result = dataContext.Board.Select(x => new {x, Count = x.DiscussionTopics.Count()});
    

    您可以简单地在每条记录上使用board.DiscussionTopics.Count(); 来获取计数。如果我正确理解您的问题,则无需执行上述操作

    更新

    如果你没有外键,那么这可能会做到

    var result = dataContext.Board.Select(x => new {x, Count = dataContext.DiscussionTopics.Count(d => d.TopicBoardId == x.BoardID)});
    

    【讨论】:

    • 这里有 2 个不同的表,讨论主题和讨论板,所以 board.DiscusionTopic.Count 不能正常工作?
    • 如果你在 board 和 discussion_topic 之间有一个外键,那么你的 board EF 类将有一个 discussion_topics 的集合,所以你没有理由不能这样做。
    • 啊,如果你这样做,生活会轻松很多。我建议您开始使用它们。它们使数据管理变得容易得多,整个 EF 将为您完成大部分艰苦的工作
    • 不幸的是,我无法更改架构中的任何内容 :( 我只需要使用他们给我的数据库
    【解决方案2】:
    from b in DataContext.Boards
    select new {
        BoardId = b.BoardID,
        BoardName = b.BoardName,
        BoardCreatedBy = b.BoardCreatedBy,
        BoardCreateDate = b.BoardCreateDate,
        TopicCount = Discussions.Count(d => d.TopicBoardId == b.BoardID)
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-03-13
      • 1970-01-01
      • 2018-05-11
      • 1970-01-01
      • 2023-03-27
      • 1970-01-01
      • 1970-01-01
      • 2011-03-12
      相关资源
      最近更新 更多