当前位置: 首页 > 知识库问答 >
问题:

使用Esqueleto处理列表类型

公西俊能
2023-03-14

我将数据类型定义为:

data ComitteeView = CommitteeView { committeeId :: CommitteeId
                                  , committeeMembers :: [Person] 
                                  }

data CommitteesView = CommitteesView { committeeView :: [CommitteeView] }

现在,就目前而言,我有一个持久模型定义为:

Person
  name  Text

Committee
  name  Text

CommitteePerson
  personId    PersonId
  committeeId CommitteeId

我可以使用Esqueleto很容易地创建一个查询来填充委托视图。它会是这样的:

getCommitteeView cid = 
  CommitteeView <$> runDB $ 
    select $
      from (person `InnerJoin` pxc `InnerJoin` committee) -> do
        on  (committee ^. CommitteeId ==. pxc ^. CommitteePersonCommitteeId)
        on  (person ^. PersonId       ==. pxc ^. CommitteePersonPersonId)
        where_ (committee ^. CommitteePersonCommitteeId ==. val cid)
        return person

现在,考虑填充CONTTEESView的问题。原则上,我们通过在上面的查询中运行子查询来获得足够的数据来填充。好的,很公平。现在如何在SQL中使用“group by Haskell-list”,如group by?如何折叠行,以便最终获得人员列表列表?

我的印象是esqueleto无法处理这种情况(即它没有可以这样做的组合器)。我的底层数据库显然不支持将Haskell列表作为列。但是,当然,我不可能是唯一面临这个问题的人。什么是有效的策略?将n个列表折叠成n个列表?或者运行n 1查询?还有其他选择吗?

共有1个答案

谭京
2023-03-14

Esqueleto并不意味着开箱即用地处理子列表(多维列表)列表!数据。List.group通过建议您的“cdk”只能分组列表本身,但不能分组您所要求的内容。

对于您的情况,我坚持建议您使用经典的SQL查询。您可以运行n 1个查询,但只有当它是罕见且不经常可用的函数时,才可以这样做,例如准备缓存数据(根据您的变量名称,我认为它可能不会被大量使用,值得一试)。对于大量使用,毫无疑问,您应该考虑使用经典SQL。

如果你愿意去https://github.com/prowdsponsor/esqueleto您会发现:

并非所有SQL功能都可用,但其中大多数功能都可以轻松添加(尤其是函数)。

所以你可以试着要求一个新功能。祝你好运!

 类似资料:
  • 我有来自API的响应文本。当我试图创建一个新的游戏从这个响应我得到一个错误: 错误:未处理的异常:“列表”类型不是“列表”类型的子类型 我在尝试使用JSON文本时遇到如下错误: 错误: 未处理的异常:“列表”类型不是“列表”类型的子类型 它指向游戏类中的这一行: 有什么建议吗?

  • 我有两组帐号,基于加元和美元货币。基于这些列表,我需要通过传递请求参数来调用相同的方法,一个用于CAD,另一个用于USD。 请指导我如何使用。 提前感谢!

  • 我正在处理包含数据库中多个记录列表的。 我应该如何指定处理每个子列表的块大小? 感谢您的帮助,提前谢谢。

  • 我正在尝试进行大量的外部服务调用,每个调用都遵循异常处理和有条件的进一步处理。我认为使用内部的. on完成来扩展这个不错的(Scala中带有期货的异步IO)示例会很容易,但似乎我对范围和/或期货有些不理解。有人能给我指出正确的方向吗? 在我的电脑上(Scala 2.10.4 ),这打印出来: 我要(顺序不重要):

  • 本文向大家介绍C#使用JavaScriptSerializer序列化时的时间类型处理,包括了C#使用JavaScriptSerializer序列化时的时间类型处理的使用技巧和注意事项,需要的朋友参考一下 最近在做一个数据交换服务接口,用的 .NET Web API 项目。需要监控每次请求的数据,也就是操作日志。请求数据为实体对象,所以我用了序列化将请求内容读取并写入日志。咋一看,好像并没有什么问题

  • 我试图从服务器获取JSON响应并将其输出到控制台。 未处理的异常:类型“\u InternalLinkedHashMap” 原因可能是什么?