.Net DataColumn.Expression - 使用 Child 前缀 - IsNull 问题

问题描述 投票:0回答:1

我有一个有趣的问题 - 主表/明细表关系。

我读入主表 - 并将详细表读入 C# 中的数据表。
我创建了一个数据关系 - 它将两个表连接在一起。 在详细信息表中,我有一个 blob 字段,该字段可能为 Null 或包含一些文本。 我在主数据表中有一个布尔值计算字段,如果任何子记录不为空,我希望它为 true - 如果它们全部为 null,则为 false。
我希望使用 DataColumn 对象的 DataRelations 属性来执行此操作 - 但它不允许我指定 IsNull(Child.Field)... IsNull 函数不允许引用。

那么 - 我想知道其他人会如何处理这个问题? 我试图避免使用另一个查询来填充主真/假字段 - 但我可能必须走那条路。 我是否遗漏了 DataRelationships 和 datacolumn.express 想法的某些内容??

简单的表格结构 - 仅供参考。
主表
QryId 国际 AreChildrenNotNull 布尔值

明细表 QryId 国际 详细信息 ID 整数 文本字段 Blob

c# datatable master-detail datarelation
1个回答
0
投票

这来自相关的文档

可以通过在列名前面加上 Child 来在表达式中引用子表中的列。但是,由于子关系可能返回多行,因此您必须在聚合函数中包含对子列的引用。例如,Sum(Child.Price) 将返回子表中名为 Price 的列的总和。

ISNULL
不是聚合函数,因此您不能在那里使用
Child

我还没有测试过,但您可以做的是在

Child
Min
函数中使用
Max
。如果这些函数只适用于数字,那么你就不走运了。如果它们会给你排序字符串列表中的第一个和最后一个值,那么你应该能够使用其中一个或另一个来获取单个值,然后将其传递给
ISNULL
。您将使用哪个取决于
NULL
值是在其他数据之前还是之后排序。像这样的东西可能会起作用:

NOT ISNULL(MAX(Child.Field))

如果这不起作用,那么我认为你运气不好。

© www.soinside.com 2019 - 2024. All rights reserved.