度量快速开发平台-专业、快速的软件定制快开平台

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 部件 流程 SQL
查看: 2624|回复: 9
打印 上一主题 下一主题

[分享] DataTable.Compute强大的功能

[复制链接]

348

主题

3572

帖子

9328

积分

论坛元老

Rank: 8Rank: 8

积分
9328
跳转到指定楼层
楼主
发表于 2020-4-2 15:50:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 万望 于 2016-5-2 15:58 编辑

作用:
          计算用来传递筛选条件的当前行上的给定表达式。
格式為:
          Object Compute (string expression,string filter)

参数:
          expression:要计算的表达式。 expression 参数需要聚合函数。
          filter:要限制在表达式中进行计算的行的筛选器。 如:“Menu_ID=5” //表示Menu_ID為5的行
返回值:
          為Object型,为计算结果。

Expression說明:
          Expression 属性的一个用途是创建计算出的列。 第二个用途是创建聚合列。类似于计算出的值,聚合基于 DataTable 中的整个行集执行操作。

表达式语法
          在创建表达式时,使用 ColumnName属性(表中列的名稱)来引用表中的列。
用法:
  1. //得到menu1表中order列中最大值
  2.             object s = dsSet.Tables["menu1"].Compute("Max(order)", "");
复制代码
上面是纯开发的代码,重点理解方法的使用;在我们度量开发平台中使用:
  1. dim dt=网格部件1.DataTable.Compute("Sum(种植面积)","地块号='"&dr["地块号"]&"'")
复制代码
二、創建Expression說明:

2.1、在为筛选器创建表达式时,用单引号将字符串括起来:
         "LastName = 'Jones'"


         2.1.1特殊字符處理:
              下面的字符是特殊字符,如下面所解释的,如果它们用于列名称中,就必须进行转义。
"n (newline)
"t (tab)
"r (carriage return)
~
(
)
#
"
/
=
>
<
+
-
*
%
&
|
^
'
"
[

          2.1.2 轉義方法為:
              如果列名称包含上面的字符之一,该名称必须用中括号括起来。例如,若要在表达式中使用名为“Column#”的列,应写成“[Column#]”:
            
  1. Total * [Column#]
复制代码

          由于中括号是特殊字符,如果它是列名称的组成部分,必须使用斜杠 (""") 将中括号转义。例如,名为“Column[]”的列应写成:
            
  1. Total * [Column["]] (只有第二个中括号必须转义。)
复制代码

2.2、用户定义的值处理
        2.2.1义的值可以用在将与列值进行比较的表达式内。字符串的值应括在单引号内。日期值应放在磅符号 (#) 内。对于数值,允许使用小数和科学记数法。例如:
  1. "FirstName = 'John'"
  2.              "Price <= 50.00"
  3.              "Birthdate < #1/31/82#"
复制代码


        2.2.2含枚举值的列,将值强制转换为整数数据类型。例如:
  1.   "EnumColumn = 5"
复制代码

2.3、运算符
         2.3.1 使用布尔值 AND、OR 和 NOT 运算符时允许串联。可以使用括号来组合子句和强制优先级。AND 运算符优先于其他运算符。例如:
  1. (LastName ='Smith' OR LastName ='Jones') AND FirstName ='John'
复制代码
         2.3.2 在创建比较表达式时,允许使用下列运算符:

<
>
<=
>=
<>
=
IN
LIKE

         2.3.3 在表达式中还支持下列算术运算符:
+(加)
-(减)
*(乘)
/(除)
%(模数)


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
若現在就覺得失望無力,未來那麽遠妳該怎麽扛...
————————————————————————致自己
回复

使用道具 举报

348

主题

3572

帖子

9328

积分

论坛元老

Rank: 8Rank: 8

积分
9328
沙发
 楼主| 发表于 2020-4-2 16:00:58 | 只看该作者
下面详细介绍Expresstion:

先看最简单的用法,使用聚合函数。这个聚合函数就是报表或者Excel中常用的函数,比如Sum,Avg等等。对于数据列,Datatable可以方便的进行计算,比如DataTable.Cumpute(“Sum(列1)”,”列1>0”); 对于简单的统计功能,这些函数就足够用了。(其他提供的函数有min,max,count,求方差,标准偏差等等)。这个功能常用,倒也不奇怪。

再看“自由表达式”计算。把数学计算表达式写成字符串,然后直接投入Compute函数计算,就可以得到计算结果。这样,动态生成的计算表达式就可以计算出来了。比方说要计算“列1×30+20+2”或者是纯粹的数学计算。

出了计算出具体的结果,Compute函数还能进行逻辑计算。比方说这个表达式就能返回false:Compute(“1=2”,”true”); 这个的用法可能想上边的情形差不多,在自由组装一些条件的时候可以得到结果。

在Excel中,还经常用到的就是LogicTest功能了,可以指定一些逻辑表达式,比如这样的:“IF(20>1000, 0, 1)”。而这个功能要是放到DataTable中该如何实现呢?也是用Compute,这样写就可以了:“IIF(20>1000, 0, 1)”。

点评

聚合函数 说得挺专业的嘛!  详情 回复 发表于 2020-4-3 14:34
若現在就覺得失望無力,未來那麽遠妳該怎麽扛...
————————————————————————致自己
回复 支持 反对

使用道具 举报

348

主题

3572

帖子

9328

积分

论坛元老

Rank: 8Rank: 8

积分
9328
板凳
 楼主| 发表于 2020-4-2 16:02:06 | 只看该作者
第二个参数Filter,就是一个简单的查询条件。比如,”true”, “Id>4”, “Name like ’%nd’ and sex=’male’”.

条件不可能很复杂
若現在就覺得失望無力,未來那麽遠妳該怎麽扛...
————————————————————————致自己
回复 支持 反对

使用道具 举报

328

主题

3738

帖子

8566

积分

作者

Rank: 7Rank: 7Rank: 7

积分
8566
QQ
地板
发表于 2020-4-3 14:34:19 | 只看该作者
万望 发表于 2016-5-2 16:00
下面详细介绍Expresstion:

先看最简单的用法,使用聚合函数。这个聚合函数就是报表或者Excel中常用的函 ...

聚合函数 说得挺专业的嘛!
回复 支持 反对

使用道具 举报

542

主题

5916

帖子

1万

积分

作者

Rank: 7Rank: 7Rank: 7

积分
13589
5#
发表于 2020-4-3 14:36:08 | 只看该作者
赞一个
回复

使用道具 举报

348

主题

3572

帖子

9328

积分

论坛元老

Rank: 8Rank: 8

积分
9328
6#
 楼主| 发表于 2020-4-3 21:54:14 | 只看该作者
陈晓龙 发表于 2016-5-3 14:34
聚合函数 说得挺专业的嘛!

必须专业

点评

厉害!  详情 回复 发表于 2020-4-4 11:19
厉害!  详情 回复 发表于 2020-4-4 11:19
若現在就覺得失望無力,未來那麽遠妳該怎麽扛...
————————————————————————致自己
回复 支持 反对

使用道具 举报

328

主题

3738

帖子

8566

积分

作者

Rank: 7Rank: 7Rank: 7

积分
8566
QQ
7#
发表于 2020-4-4 11:19:40 | 只看该作者

厉害!
回复 支持 反对

使用道具 举报

328

主题

3738

帖子

8566

积分

作者

Rank: 7Rank: 7Rank: 7

积分
8566
QQ
8#
发表于 2020-4-4 11:19:46 | 只看该作者

厉害!
回复 支持 反对

使用道具 举报

348

主题

3572

帖子

9328

积分

论坛元老

Rank: 8Rank: 8

积分
9328
9#
 楼主| 发表于 2020-5-5 08:32:03 | 只看该作者
若現在就覺得失望無力,未來那麽遠妳該怎麽扛...
————————————————————————致自己
回复 支持 反对

使用道具 举报

348

主题

3572

帖子

9328

积分

论坛元老

Rank: 8Rank: 8

积分
9328
10#
 楼主| 发表于 2020-5-20 09:43:07 | 只看该作者
陈晓龙 发表于 2016-5-3 14:34
聚合函数 说得挺专业的嘛!

好好学习,博大精深的datatable
若現在就覺得失望無力,未來那麽遠妳該怎麽扛...
————————————————————————致自己
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|重庆度量科技  本站关键词:快速开发平台

GMT+8, 2024-11-24 17:52 , Processed in 0.131880 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表