使用 EF Core Linq2Sql 进行聚合的聚合

2023-12-09

我有一个带有 EF Core 2.2 Code-First DB 的 ASP.NET Core 2.2 项目。我有以下实体:

  • 建筑物,基本上是一个带有一些其他重要数据的地址。
  • Floor,包含楼层号。一栋建筑物可以有多层。一个楼层必须恰好有一个建筑物所在的位置。
  • 房间,有号码。一个楼层可以有多个房间。一个房间必须只有一层。
  • WorkGroup,包含该组有多少员工、该组是否仍然活跃、该组什么时候开始运营(可以是将来)。
  • RoomOccupancy,它是工作组和房间之间的连接表,显示工作组现在/曾经/将在哪个房间。

我需要一份建筑物列表,其中包含建筑物名称、建筑物有多少层、建筑物有多少个房间(不是楼层)以及当前在建筑物内工作的人数。

目前我能够获取所有数据,但翻译后的 SQL 不是最佳的,并且需要多次访问数据库。我能够手动编写一个 SQL select 语句(带有内部 select)来解决这个问题,所以我知道这应该可以通过一个查询来实现。

dbContext.Buildings.Select(x=> new BuildingDatableElementDTO(){
            BuildingId = b.Id,
            Name = b.Name,
            FloorCount = b.Floors.Count(),
            //this is the part where problems start,
            //this translates to multiple SQL statements
            RoomCount = b.Floors.Sum(f=>f.Rooms.Count()),
            // I replaced the next line with
            // CurrentWorkerCount = 10, but a solution would be nice
            CurrentWorkerCount = b.Floors.Sum(f=>f.Rooms
              .Sum(r=>r.RoomOccupancies
                 .Where(o=>!o.WorkGroup.IsFinished && o.WorkGroup.StartDate < Datetime.Now).
                 .Sum(w => w.NumberOfEmployees)
                 ))),
    }).ToList();

出于测试目的,我将 CurrentWorkerCount lambda 替换为 CurrentWorkerCount = 10,因为我可以理解它是否很难转换为 SQL,但它仍然无法使用 RoomCount 创建一个 SQL 语句。

使用信息级别进行日志记录显示:对于每座至少有一层的建筑物,“LINQ 表达式 '"Sum()"' 无法翻译,将在本地求值”。 然后,我有一个更大的 DbCommand(太长,无法复制),然后为每栋建筑使用一个 DbCommand,用于计算房间数。

我读到 EF Core 2.1 的聚合存在问题,但我认为 ORM 将此投影转换为一个查询应该不是一项艰巨的任务。

我是在那里做错了什么还是这些是 LINQ 和 EF Core 的功能?我认为以前使用非 Core EF 可以轻松做到这一点。我读到了有关 GroupBy 和聚合的一些解决方法,但它对我的情况没有帮助。

UPDATE

这是生成的日志(仅有趣的部分)。我正在使用自定义解决方案进行过滤、排序和分页,该解决方案非常适合解决简单的问题。本例中没有过滤,按建筑物名称和基本获取排序(跳过 0 取 15)。数据库中只有极少量的测试数据(15栋大楼,其中一栋有1层,另一栋有2层,其中一栋有1个房间,有1个工作组,有100名员工)。我还具有为 IsDeleted 标志配置的全局过滤器的软删除。我不认为这些事情会影响结果,但它们就在这里,也许会影响结果。

  • LINQ 表达式“Sum()”无法翻译,将在本地求值。
  • LINQ 表达式“Sum()”无法翻译,将在本地求值。
  • LINQ 表达式“Sum()”无法翻译,将在本地求值。
  • LINQ 表达式“Sum()”无法翻译,将在本地求值。
  • LINQ 表达式“Sum()”无法翻译,将在本地求值。
  • LINQ 表达式“Sum()”无法翻译,将在本地求值。
  • LINQ 表达式“Sum()”无法翻译,将在本地求值。
  • LINQ 表达式“Sum()”无法翻译,将在本地求值。
  • 已执行 DbCommand ("2"ms) [参数=["@__p_0='?' (DbType = Int32), @__p_1='?' (DbType = Int32)"], CommandType='文本', CommandTimeout='30']"
SELECT CONVERT(VARCHAR(36), [x].[Id]) AS [BuildingId], [x].[Name], (
    SELECT COUNT(*)
    FROM [Floors] AS [x0]
    WHERE ([x0].[IsDeleted] = 0) AND ([x].[Id] = [x0].[BuildingId])
) AS [FloorCount], [x].[Id]
FROM [Buildings] AS [x]
WHERE [x].[IsDeleted] = 0
ORDER BY [x].[Name]
OFFSET @__p_0 ROWS FETCH NEXT @__p_1 ROWS ONLY
  • 已执行 DbCommand ("1"ms) [参数=["@_outer_Id='?' (DbType = Guid)"], CommandType='文本', CommandTimeout='30']"
SELECT (
    SELECT COUNT(*)
    FROM [Rooms] AS [x4]
    WHERE ([x4].[IsDeleted] = 0) AND ([x3].[Id] = [x4].[FloorId])
)
FROM [Floors] AS [x3]
WHERE ([x3].[IsDeleted] = 0) AND (@_outer_Id = [x3].[BuildingId])
  • 已执行 DbCommand ("1"ms) [参数=["@_outer_Id2='?' (DbType = Guid)"], CommandType='文本', CommandTimeout='30']"
SELECT [x10].[Id]
FROM [Floors] AS [x10]
WHERE ([x10].[IsDeleted] = 0) AND (@_outer_Id2 = [x10].[BuildingId])
  • 已执行 DbCommand ("1"ms) [参数=["@_outer_Id='?' (DbType = Guid)"], CommandType='文本', CommandTimeout='30']"
SELECT (
    SELECT COUNT(*)
    FROM [Rooms] AS [x4]
    WHERE ([x4].[IsDeleted] = 0) AND ([x3].[Id] = [x4].[FloorId])
)
FROM [Floors] AS [x3]
WHERE ([x3].[IsDeleted] = 0) AND (@_outer_Id = [x3].[BuildingId])
  • 已执行 DbCommand ("1"ms) [参数=["@_outer_Id2='?' (DbType = Guid)"], CommandType='文本', CommandTimeout='30']"
SELECT [x10].[Id]
FROM [Floors] AS [x10]
WHERE ([x10].[IsDeleted] = 0) AND (@_outer_Id2 = [x10].[BuildingId])
  • 已执行 DbCommand ("1"ms) [参数=["@_outer_Id='?' (DbType = Guid)"], CommandType='文本', CommandTimeout='30']"
SELECT (
    SELECT COUNT(*)
    FROM [Rooms] AS [x4]
    WHERE ([x4].[IsDeleted] = 0) AND ([x3].[Id] = [x4].[FloorId])
)
FROM [Floors] AS [x3]
WHERE ([x3].[IsDeleted] = 0) AND (@_outer_Id = [x3].[BuildingId])
  • 已执行 DbCommand ("0"ms) [参数=["@_outer_Id2='?' (DbType = Guid)"], CommandType='文本', CommandTimeout='30']"
SELECT [x10].[Id]
FROM [Floors] AS [x10]
WHERE ([x10].[IsDeleted] = 0) AND (@_outer_Id2 = [x10].[BuildingId])
  • 已执行 DbCommand ("1"ms) [参数=["@_outer_Id='?' (DbType = Guid)"], CommandType='文本', CommandTimeout='30']"
SELECT (
    SELECT COUNT(*)
    FROM [Rooms] AS [x4]
    WHERE ([x4].[IsDeleted] = 0) AND ([x3].[Id] = [x4].[FloorId])
)
FROM [Floors] AS [x3]
WHERE ([x3].[IsDeleted] = 0) AND (@_outer_Id = [x3].[BuildingId])
  • 已执行 DbCommand ("1"ms) [参数=["@_outer_Id2='?' (DbType = Guid)"], CommandType='文本', CommandTimeout='30']"
SELECT [x10].[Id]
FROM [Floors] AS [x10]
WHERE ([x10].[IsDeleted] = 0) AND (@_outer_Id2 = [x10].[BuildingId])
  • 已执行 DbCommand ("1"ms) [参数=["@_outer_Id='?' (DbType = Guid)"], CommandType='文本', CommandTimeout='30']"
SELECT (
    SELECT COUNT(*)
    FROM [Rooms] AS [x4]
    WHERE ([x4].[IsDeleted] = 0) AND ([x3].[Id] = [x4].[FloorId])
)
FROM [Floors] AS [x3]
WHERE ([x3].[IsDeleted] = 0) AND (@_outer_Id = [x3].[BuildingId])
  • 已执行 DbCommand ("1"ms) [参数=["@_outer_Id2='?' (DbType = Guid)"], CommandType='文本', CommandTimeout='30']"
SELECT [x10].[Id]
FROM [Floors] AS [x10]
WHERE ([x10].[IsDeleted] = 0) AND (@_outer_Id2 = [x10].[BuildingId])
  • 已执行 DbCommand ("1"ms) [参数=["@__Now_2='?' (DbType = DateTime2), @_outer_Id3='?' (DbType = Guid)"], CommandType='文本', CommandTimeout='30']"
SELECT (
    SELECT SUM([x14].[NumberOfEmployees])
    FROM [RoomOccupancys] AS [x14]
    LEFT JOIN [WorkGroups] AS [k.WorkGroup2] ON [x14].[WorkGroupId] = [k.WorkGroup2].[Id]
    WHERE (([x14].[IsDeleted] = 0) AND (([k.WorkGroup2].[IsFinished] = 0) AND ([k.WorkGroup2].[StartDate] < @__Now_2))) AND ([x13].[Id] = [x14].[RoomId])
)
FROM [Rooms] AS [x13]
WHERE ([x13].[IsDeleted] = 0) AND (@_outer_Id3 = [x13].[FloorId])
  • 已执行 DbCommand ("1"ms) [参数=["@_outer_Id='?' (DbType = Guid)"], CommandType='文本', CommandTimeout='30']"
SELECT (
    SELECT COUNT(*)
    FROM [Rooms] AS [x4]
    WHERE ([x4].[IsDeleted] = 0) AND ([x3].[Id] = [x4].[FloorId])
)
FROM [Floors] AS [x3]
WHERE ([x3].[IsDeleted] = 0) AND (@_outer_Id = [x3].[BuildingId])
  • 已执行 DbCommand ("1"ms) [参数=["@_outer_Id2='?' (DbType = Guid)"], CommandType='文本', CommandTimeout='30']"
SELECT [x10].[Id]
FROM [Floors] AS [x10]
WHERE ([x10].[IsDeleted] = 0) AND (@_outer_Id2 = [x10].[BuildingId])
  • 已执行 DbCommand ("1"ms) [参数=["@_outer_Id='?' (DbType = Guid)"], CommandType='文本', CommandTimeout='30']"
SELECT (
    SELECT COUNT(*)
    FROM [Rooms] AS [x4]
    WHERE ([x4].[IsDeleted] = 0) AND ([x3].[Id] = [x4].[FloorId])
)
FROM [Floors] AS [x3]
WHERE ([x3].[IsDeleted] = 0) AND (@_outer_Id = [x3].[BuildingId])
  • 已执行 DbCommand ("0"ms) [参数=["@_outer_Id2='?' (DbType = Guid)"], CommandType='文本', CommandTimeout='30']"
SELECT [x10].[Id]
FROM [Floors] AS [x10]
WHERE ([x10].[IsDeleted] = 0) AND (@_outer_Id2 = [x10].[BuildingId])
  • 已执行 DbCommand ("1"ms) [参数=["@_outer_Id='?' (DbType = Guid)"], CommandType='文本', CommandTimeout='30']"
SELECT (
    SELECT COUNT(*)
    FROM [Rooms] AS [x4]
    WHERE ([x4].[IsDeleted] = 0) AND ([x3].[Id] = [x4].[FloorId])
)
FROM [Floors] AS [x3]
WHERE ([x3].[IsDeleted] = 0) AND (@_outer_Id = [x3].[BuildingId])
  • 已执行 DbCommand ("0"ms) [参数=["@_outer_Id2='?' (DbType = Guid)"], CommandType='文本', CommandTimeout='30']"
SELECT [x10].[Id]
FROM [Floors] AS [x10]
WHERE ([x10].[IsDeleted] = 0) AND (@_outer_Id2 = [x10].[BuildingId])
  • 已执行 DbCommand ("1"ms) [参数=["@__Now_2='?' (DbType = DateTime2), @_outer_Id3='?' (DbType = Guid)"], CommandType='文本', CommandTimeout='30']"
SELECT (
    SELECT SUM([x14].[RemainingAmount])
    FROM [RoomOccupancys] AS [x14]
    LEFT JOIN [WorkGroups] AS [k.WorkGroup2] ON [x14].[WorkGroupId] = [k.WorkGroup2].[Id]
    WHERE (([x14].[IsDeleted] = 0) AND (([k.WorkGroup2].[IsFinished] = 0) AND ([k.WorkGroup2].[StartDate] < @__Now_2))) AND ([x13].[Id] = [x14].[RoomId])
)
FROM [Rooms] AS [x13]
WHERE ([x13].[IsDeleted] = 0) AND (@_outer_Id3 = [x13].[FloorId])
  • 已执行 DbCommand ("1"ms) [参数=["@_outer_Id='?' (DbType = Guid)"], CommandType='文本', CommandTimeout='30']"
SELECT (
    SELECT COUNT(*)
    FROM [Rooms] AS [x4]
    WHERE ([x4].[IsDeleted] = 0) AND ([x3].[Id] = [x4].[FloorId])
)
FROM [Floors] AS [x3]
WHERE ([x3].[IsDeleted] = 0) AND (@_outer_Id = [x3].[BuildingId])
  • 已执行 DbCommand ("1"ms) [参数=["@_outer_Id2='?' (DbType = Guid)"], CommandType='文本', CommandTimeout='30']"
SELECT [x10].[Id]
FROM [Floors] AS [x10]
WHERE ([x10].[IsDeleted] = 0) AND (@_outer_Id2 = [x10].[BuildingId])
  • 已执行 DbCommand ("1"ms) [参数=["@_outer_Id='?' (DbType = Guid)"], CommandType='文本', CommandTimeout='30']"
SELECT (
    SELECT COUNT(*)
    FROM [Rooms] AS [x4]
    WHERE ([x4].[IsDeleted] = 0) AND ([x3].[Id] = [x4].[FloorId])
)
FROM [Floors] AS [x3]
WHERE ([x3].[IsDeleted] = 0) AND (@_outer_Id = [x3].[BuildingId])
  • 已执行 DbCommand ("0"ms) [参数=["@_outer_Id2='?' (DbType = Guid)"], CommandType='文本', CommandTimeout='30']"
SELECT [x10].[Id]
FROM [Floors] AS [x10]
WHERE ([x10].[IsDeleted] = 0) AND (@_outer_Id2 = [x10].[BuildingId])
  • 已执行 DbCommand ("1"ms) [参数=["@_outer_Id='?' (DbType = Guid)"], CommandType='文本', CommandTimeout='30']"
SELECT (
    SELECT COUNT(*)
    FROM [Rooms] AS [x4]
    WHERE ([x4].[IsDeleted] = 0) AND ([x3].[Id] = [x4].[FloorId])
)
FROM [Floors] AS [x3]
WHERE ([x3].[IsDeleted] = 0) AND (@_outer_Id = [x3].[BuildingId])
  • 已执行 DbCommand ("0"ms) [参数=["@_outer_Id2='?' (DbType = Guid)"], CommandType='文本', CommandTimeout='30']"
SELECT [x10].[Id]
FROM [Floors] AS [x10]
WHERE ([x10].[IsDeleted] = 0) AND (@_outer_Id2 = [x10].[BuildingId])
  • 已执行 DbCommand ("1"ms) [参数=["@_outer_Id='?' (DbType = Guid)"], CommandType='文本', CommandTimeout='30']"
SELECT (
    SELECT COUNT(*)
    FROM [Rooms] AS [x4]
    WHERE ([x4].[IsDeleted] = 0) AND ([x3].[Id] = [x4].[FloorId])
)
FROM [Floors] AS [x3]
WHERE ([x3].[IsDeleted] = 0) AND (@_outer_Id = [x3].[BuildingId])
  • 已执行 DbCommand ("1"ms) [参数=["@_outer_Id2='?' (DbType = Guid)"], CommandType='文本', CommandTimeout='30']"
SELECT [x10].[Id]
FROM [Floors] AS [x10]
WHERE ([x10].[IsDeleted] = 0) AND (@_outer_Id2 = [x10].[BuildingId])
  • 已执行 DbCommand ("1"ms) [参数=["@_outer_Id='?' (DbType = Guid)"], CommandType='文本', CommandTimeout='30']"
SELECT (
    SELECT COUNT(*)
    FROM [Rooms] AS [x4]
    WHERE ([x4].[IsDeleted] = 0) AND ([x3].[Id] = [x4].[FloorId])
)
FROM [Floors] AS [x3]
WHERE ([x3].[IsDeleted] = 0) AND (@_outer_Id = [x3].[BuildingId])
  • 已执行 DbCommand ("1"ms) [参数=["@_outer_Id2='?' (DbType = Guid)"], CommandType='文本', CommandTimeout='30']"
SELECT [x10].[Id]
FROM [Floors] AS [x10]
WHERE ([x10].[IsDeleted] = 0) AND (@_outer_Id2 = [x10].[BuildingId])
  • 已执行 DbCommand ("1"ms) [参数=["@_outer_Id='?' (DbType = Guid)"], CommandType='文本', CommandTimeout='30']"
SELECT (
    SELECT COUNT(*)
    FROM [Rooms] AS [x4]
    WHERE ([x4].[IsDeleted] = 0) AND ([x3].[Id] = [x4].[FloorId])
)
FROM [Floors] AS [x3]
WHERE ([x3].[IsDeleted] = 0) AND (@_outer_Id = [x3].[BuildingId])
  • 已执行 DbCommand ("0"ms) [参数=["@_outer_Id2='?' (DbType = Guid)"], CommandType='文本', CommandTimeout='30']"
SELECT [x10].[Id]
FROM [Floors] AS [x10]
WHERE ([x10].[IsDeleted] = 0) AND (@_outer_Id2 = [x10].[BuildingId])
  • 已执行 DbCommand ("1"ms) [参数=["@_outer_Id='?' (DbType = Guid)"], CommandType='文本', CommandTimeout='30']"
SELECT (
    SELECT COUNT(*)
    FROM [Rooms] AS [x4]
    WHERE ([x4].[IsDeleted] = 0) AND ([x3].[Id] = [x4].[FloorId])
)
FROM [Floors] AS [x3]
WHERE ([x3].[IsDeleted] = 0) AND (@_outer_Id = [x3].[BuildingId])
  • 已执行 DbCommand ("0"ms) [参数=["@_outer_Id2='?' (DbType = Guid)"], CommandType='文本', CommandTimeout='30']"
SELECT [x10].[Id]
FROM [Floors] AS [x10]
WHERE ([x10].[IsDeleted] = 0) AND (@_outer_Id2 = [x10].[BuildingId])

我读到 EF Core 2.1 的聚合存在问题,但我认为 ORM 将此投影转换为一个查询应该不是一项艰巨的任务。

你是对的,EF Core 有(并且仍然有 - 目前最新的 v2.2)翻译问题GroupBy和聚合(而且不仅仅是)。但不是为了“不应该是一项艰巨的任务”- 尝试自己将任意表达式树转换为伪 SQL,您很快就会发现这是一项相当复杂的任务。

不管怎样,EF Core 查询翻译随着时间的推移不断改进,但正如前面提到的,它还远非完美。在这种情况下,最重要的是嵌套聚合 - 总和/计数等的总和。解决方案是展平目标集并应用单个聚合。例如,按如下方式重写 LINQ 查询:

dbContext.Buildings.Select(b => new //BuildingDatableElementDTO()
{
    BuildingId = b.Id,
    Name = b.Name,
    FloorCount = b.Floors.Count(),
    // (1)
    RoomCount = b.Floors.SelectMany(f => f.Rooms).Count(),
    // (2)
    CurrentWorkerCount = b.Floors
        .SelectMany(f => f.Rooms)
        .SelectMany(r => r.RoomOccupancies)
        .Select(o => o.WorkGroup)
        .Where(w => !w.IsFinished && w.StartDate < DateTime.Now)
        .Sum(w => w.NumberOfEmployees),
})
.ToList();

被转换为单个 SQL(如预期):

  SELECT [e].[Id] AS [BuildingId], [e].[Name], (
      SELECT COUNT(*)
      FROM [Floors] AS [e0]
      WHERE ([e0].[IsDeleted] = 0) AND ([e].[Id] = [e0].[BuildingId])
  ) AS [FloorCount], (
      SELECT COUNT(*)
      FROM [Floors] AS [e1]
      INNER JOIN (
          SELECT [e2].[Id], [e2].[FloorId], [e2].[IsDeleted], [e2].[Name]
          FROM [Rooms] AS [e2]
          WHERE [e2].[IsDeleted] = 0
      ) AS [t] ON [e1].[Id] = [t].[FloorId]
      WHERE ([e1].[IsDeleted] = 0) AND ([e].[Id] = [e1].[BuildingId])
  ) AS [RoomCount], (
      SELECT SUM([f.Rooms.RoomOccupancies.WorkGroup].[NumberOfEmployees])
      FROM [Floors] AS [e3]
      INNER JOIN (
          SELECT [e4].*
          FROM [Rooms] AS [e4]
          WHERE [e4].[IsDeleted] = 0
      ) AS [t0] ON [e3].[Id] = [t0].[FloorId]
      INNER JOIN (
          SELECT [e5].*
          FROM [RoomOccupancies] AS [e5]
          WHERE [e5].[IsDeleted] = 0
      ) AS [t1] ON [t0].[Id] = [t1].[RoomId]
      INNER JOIN [WorkGroups] AS [f.Rooms.RoomOccupancies.WorkGroup] ON [t1].[WorkgroupId] = [f.Rooms.RoomOccupancies.WorkGroup].[Id]
      WHERE (([e3].[IsDeleted] = 0) AND (([f.Rooms.RoomOccupancies.WorkGroup].[IsFinished] = 0) AND ([f.Rooms.RoomOccupancies.WorkGroup].[StartDate] < GETDATE()))) AND ([e].[Id] = [e3].[BuildingId])
  ) AS [CurrentWorkerCount]
  FROM [Building] AS [e]
  WHERE [e].[IsDeleted] = 0
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 EF Core Linq2Sql 进行聚合的聚合 的相关文章

随机推荐

  • 如何在 Ruby 中打印行号

    我正在尝试遍历一个文件来检查每一行及其开头的空格 我们想使用空格作为开始或制表符 如果一行以空格开头 另一行以制表符开头 我想通知用户空格不一致 举个例子 我想打印一行以空格开头的行和一行以制表符开头的行 我陷入了获取行号部分 我尝试 fi
  • 在 R 中使用 RegEx 检索第二次出现句点 ('.') 之前的字符串

    什么正则表达式可以检索 例如使用sup 第二个句点之前的字符 给定一个字符向量 例如 v lt c m s E1 m x R1PE1 m xs P1 m s R2E12 我想退回这个 1 m s E1 m xs P1 gt sub 1 v
  • 哪些 API 用于绘制其他应用程序(例如 Facebook 的 Chat Heads)?

    Facebook 如何在 Android 上创建聊天头 在所有其他视图之上创建浮动视图的 API 是什么 This one 允许应用程序使用类型打开窗口 TYPE SYSTEM ALERT 显示在所有其他应用程序之上 很少有应用程序应该使用
  • 电子表格中特定工作表的 onEdit 触发器?

    我无法找到有关如何设置 onEdit 触发器的良好资源 我有一个只想在编辑特定工作表时运行的函数 例如说我有 Sheet1 Sheet2 Sheet3 Sheet4 Sheet5 我的脚本从工作表 2 3 4 中提取数据并填充工作表 1 我
  • 将automatic_scaling max_idle_instances 设置为零(0)有什么作用?

    将automatic scaling max idle instances 设置为零 0 有什么作用 automatic scaling max idle instances 0 min idle instances 0 它是否会导致活动实
  • 在 Mac 启动时运行 python 脚本

    我正在尝试让 python 脚本在启动时运行 我有以下文件 com test service plist
  • 刷新 JLabel 图标图像

    我使用 JLabel 在 JFrame 中显示图像并设置它的图标 它第一次工作 但是每当我去更改图像时 它仍然保持我第一次设置的内容 所以我尝试过这个 但结果仍然相同 contentPane remove lblPlaceholder lb
  • Google Apps 脚本:“错误 401:deleted_client OAuth 客户端已删除”突然?

    我目前在 Google Sheets 上使用 Google App Scripts 作为我的预算电子表格 本质上 我的设置方式是 Buy item 将费用输入 Google 表单 输入电子表格 使用 Apps 脚本将时间戳转换为 yyyy
  • 我如何有条件地要求使用 AngularJS 进行表单输入?

    假设我们正在使用 AngularJS 构建一个地址簿应用程序 人为的示例 我们有一个联系人表单 其中包含电子邮件和电话号码的输入 我们希望要求非此即彼 but not both 我们只想要email如果需要输入phone输入为空或无效 反之
  • d3:当鼠标悬停事件时,多系列折线图每行的工具提示

    我正在 Angular 2 应用程序中使用 d3 绘制图表 现在我有一个多系列折线图 因此我尝试在将鼠标悬停在其垂直位置时在每条线上添加工具提示 export class LineGraphDirective private host pr
  • 如何使用 HttpClient.PostAsync 发送大数据文件? [复制]

    这个问题在这里已经有答案了 我的功能如下 对于 25MB 左右的任何内容 它都可以很好地工作 但大于该值 它就会停止工作 当我说停止工作时 它不会抛出任何异常并且失败noserver函数底部的结果选项 我似乎找不到任何涉及任何其他缓冲区大小
  • 如何在 Spring Boot 中使用 Spring Web Services 动态 WSDL 生成?

    我跟着Spring Web 服务入门教程我已经整理了一个示例 Web 应用程序 可以在以下位置动态生成 W SDL ws holiday wsdl端点为请求提供服务 ws holidayService 到目前为止 一切都很好 现在我正在将该
  • 计算两条路径的交叉面积

    只有一个Raphael pathIntersection path1 path2 效用于Rapha l库 而这个方法只能获取交叉点这 2 条路径中 我需要的是交叉区域 如下图所示 该方法仅得到2分 用红色圆圈标记 我希望同时有另外 2 个点
  • 绝对路径和相对路径

    使用任何 Web 服务器或 Tomcat 时 绝对路径和相对路径有什么区别 绝对路径以 开头 指的是从当前站点 或虚拟主机 的根目录开始的位置 相对路径不以 开头 而是引用所引用文档的实际位置中的位置 示例 假设根是http foo com
  • 添加小数点时,ios 在字典上使用双引号

    我正在与 JSON 交互 对于 get 它工作正常 但是对于 post 我有一个错误 因为字典对象用双引号 引起来 对于网络服务 我收到双引号错误 问题是 如果我使用点来表示小数点 则会出现双引号 NSMutableDictionary d
  • 如何在 IPython 笔记本中隐藏 [重复]

    这个问题在这里已经有答案了 我正在绘制一个 NumPy 值数组 I 使用 IPython 笔记本 matplotlib使用绘图命令的内联模式plt plot I o 结果输出是
  • 使用生成的主键插入 Derby 表时,Eclipselink JPA 出现错误

    当使用生成的主键持久保存到表中时 EclipseLink 似乎错误地将空主键值传递给 Derby 德比返回错误尝试修改标识列在这种情况下 Derby 需要一条排除 id 值的 SQL 语句 我的问题是如何强制 EclipseLink 发送正
  • JavaScript 中处理大数 (BigNum) 的标准解决方案是什么?

    JavaScript 或浏览器中是否内置了 bignum 另一种方法是加载外部库 例如 但这似乎很慢并且可能会触发安全警告 我考虑过自己的基础http github com silentmatt javascript biginteger
  • 忽略基类 使用 Dokka 查看子类文档中的公共函数

    我使用 Dokka 为 View 子类生成了文档 效果很好 但文档包含基本 View 类的数百个公共函数 有没有办法只记录我的子类公共函数 我尝试将这些选项添加到 Gradle 任务中 但我不认为这就是它的用途 dokkaHtml dokk
  • 使用 EF Core Linq2Sql 进行聚合的聚合

    我有一个带有 EF Core 2 2 Code First DB 的 ASP NET Core 2 2 项目 我有以下实体 建筑物 基本上是一个带有一些其他重要数据的地址 Floor 包含楼层号 一栋建筑物可以有多层 一个楼层必须恰好有一个