gpt4 book ai didi

c# DataGrid BindingListCollectionView 自定义过滤器抛出聚合函数的无效用法意味着

转载 作者:行者123 更新时间:2023-12-01 00:09:42 24 4
gpt4 key购买 nike

我有一个 Collection View ,我想在其中应用大于平均值的过滤器。问题是列类型是字符串。所以正常大于任何数字在转换为 double 类型后工作完美,问题是如何做到平均。我尝试了以下代码:

collectionView.CustomFilter = $"CONVERT({col}, 'System.Double') > AVG([{col}])";

正如预期的那样,由于 AVG 无法应用于字符串类型,它中断了。但是当我试图把

AVG([CONVERT({col}, 'System.Double')])

它不评估转化。

有什么克服它的建议吗?

最佳答案

这实际上是底层 DataView.RowFilter(和 DataColumn.Expression)支持的限制 Aggregates :

An aggregate can only be applied to a single column and no other expressions can be used inside the aggregate.

我看到的克服它的唯一方法是将(动态)计算列添加到执行 CONVERT 的底层 DataTable,然后在过滤器中使用该列表达。

像这样:

var dataView = collectionView.SourceCollection as DataView;
if (dataView.Table.Columns[col].DataType == typeof(string))
{
var calcCol = col + "_Double";
if (!dataView.Table.Columns.Contains(calcCol))
dataView.Table.Columns.Add(calcCol, typeof(double), $"CONVERT({col}, 'System.Double')");
col = calcCol;
}
collectionView.CustomFilter = $"{col} > AVG({col})";

关于c# DataGrid BindingListCollectionView 自定义过滤器抛出聚合函数的无效用法意味着,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59872001/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com