ColdFusion可以在更少的行中实现这一点吗?

ColdFusion可以在更少的行中实现这一点吗?,coldfusion,Coldfusion,我有一个如下的查询: DATEUPLOADED ID TYPE 1 2017-08-14 15:47:45.0 2405507 D 2 2017-08-14 15:47:44.0 2405506 D 3 2017-08-16 08:43:58.0 2407829 S 4 2017-08-16 08:43:41.0 2407828 S 5 2017-08-18 13:13:29.0 2411567 C 6 2017

我有一个如下的查询:

    DATEUPLOADED             ID     TYPE
1   2017-08-14 15:47:45.0   2405507 D
2   2017-08-14 15:47:44.0   2405506 D
3   2017-08-16 08:43:58.0   2407829 S
4   2017-08-16 08:43:41.0   2407828 S
5   2017-08-18 13:13:29.0   2411567 C
6   2017-08-18 13:16:20.0   2411571 P
7   2017-08-18 15:42:39.0   2411753 C
8   2017-08-18 15:44:39.0   2411759 C
9   2017-08-18 15:45:14.0   2411760 C
10  2017-08-18 15:45:48.0   2411761 C
11  2017-08-18 16:39:05.0   2411849 A
12  2017-08-18 16:40:12.0   2411853 V
是否可以在较少的行中执行以下操作:

<cfquery name="GetCount" dbtype="query" >
   SELECT COUNT(ID) FROM TheAboveQuery WHERE Type = 'C'
</cfquery>

<cfif GetCount.RecordCount gt 0 > 
     Do something
</cfif> 

从上面的查询中选择计数(ID),其中类型='C'
做点什么

根据您希望实现的目标,这可能是可行的:

<cfif arrayFind(TheAboveQuery ['type'], 'C') gt 0>
do something
</cfif>

做点什么

您没有指定要在其上运行的CF引擎或版本。还有一些更短的方法,无论是否在其中添加换行符,都可以使它们成为一行。我要提醒你,这不是竞争,所以为了可读性,不要害怕多写几行

这是好的和整洁的,应该在Lucee服务器和Adobe 2016上工作

if( TheAboveQuery.filter( function(r){ return r.type=='C'; }).recordCount ) {
  // do something
}
如果你在Lucee5上,你可以通过使用Lambda(箭头函数)而不是传统的闭包来删除更多的字符,但在这一点上你不太可能真正受益匪浅

if( TheAboveQuery.filter( (r) => return r.type=='C' ).recordCount ) {
  // do something
}

可能吧,但你可能会牺牲可读性。@DanBracuk我或多或少只是好奇。我喜欢这个。我不认为它的可读性差,真的。coldfusion将查询视为数组是愚蠢的。在
arrayFind
之前,您必须使用
ListFind(ValueList(TheAboveQuery.Type),“C”)
。如果“type”值大小写不一,请确保使用
arrayFindNoCase
ListFindNocase
。。。或者使用
UPPER(Type)='C'
进行查询。请注意,该代码将在Adobe CF上运行,但在Lucee服务器上不会开箱即用。Lucee没有隐式地将CF查询列视为数组,而是提供了一个将其作为数组的函数:QueryColumnData()。