列表标签中models和bindModel参数详解

作者:李宁宁 来源:本站原创 点击数: 发布时间:2012年07月27日
在动易系统中,对信息的展示最常用的就是列表类标签,其中在过滤和展示信息时常用到两个字段:models和bindModel。下面我们详细解释一下这两个参数。(以通用信息列表为例)
【models参数】过滤查询时要查询的模型,可多选,用逗号分隔。
标签中处理如下:
   AND CM.ModelID IN ()
例如我们设置models=”1,2,3”那么通用信息列表在拼SQL时就加上AND CM.ModelID IN (1,2,3).这样就可以在一个列表中提取三种模型的信息。如果models=”0”那么将不进行modelid的过滤,提取所有模型信息。
【bindModel参数】通过模型ID与指定的模型表联合。
标签中处理如下:
       
           
                INNER JOIN PE_SpecialInfos SI ON (CM.ItemID = SI.GeneralID)
           
           
               
           
       
在这个参数中可以联接专题信息、也可以联接普通模型表。
联接专题信息表教容易理解:INNER JOIN PE_SpecialInfos SI ON (CM.ItemID = SI.GeneralID),直接将专题信息表PE_SpecialInfos和PE_CommonModel表联接查询相应数据。
联接模型信息表时会用到一个函数:pe:GetSqlSnippet($bindModel),这个函数的作用就是联表,具体实现:
 
public string GetSqlSnippet(int modelId)
{
    if (modelId == 0) return string.Empty;
    ModelInfo modelInfo=ModelManager.GetCacheModelById(modelId);
    return string.Format(“inner join {0} UT ON (CM.ItemID = UT.ID)”,modelInfo.TableName);
}
从实现上看出这个函数将配置的模型表(联接后重命名为UT)和PE_CommonModel联接。
 
举个例子:
如果两个参数都为0,则 SQL为:
SELECT TOP @pageSize * FROM PE_CommonModel CM
WHERE CM. Status = 99 AND CM. NodeID IN (@nodes) ORDER BY @listOrderValue
如果两个参数都为1,则 SQL为:
SELECT TOP @pageSize * FROM PE_CommonModel CM
INNER JOIN PE_U_Article UT ON (CM. ItemID = UT .ID)
WHERE CM. Status = 99 AND CM. ModelID IN (1) AND CM .NodeID IN (@nodes) ORDER BY @listOrderValue
通过分析这两个函数,在我们调用标签参数时需注意这两个参数的设置,避免因为过多设置而查询冗余数据导致标签性能不佳。