使用ICustomConditionalFunc自定义条件时,会多了一个And 语句,脚本执行报错 返回
使用如下样例查询,产生的查询条件会多了一个And 语句,导致脚本执行报错,但把cdnCode和cdnMatName调换下顺序,就能正常,大佬帮忙解答下是什么原因导致的
--自定义条件
class customCdn : ICustomConditionalFunc
{
public KeyValuePair<string, SugarParameter[]> GetConditionalSql(ConditionalModel conditionalModel, int index)
{
var parameterName = "@cp" + index;
SugarParameter[] pars = new SugarParameter[]
{
new SugarParameter(parameterName, conditionalModel.FieldValue )
};
return new KeyValuePair<string, SugarParameter[]>
($" {conditionalModel.FieldName} like '%'+{parameterName}+'%'", pars);
}
}
--查询样例
var qry = rep.Context.Queryable<Material>("m")
.Select(m => new
{
Code = m.Code,
Name = m.Name,
MatName = m.Code + "_" + (m.Name??"")
});
string searchVal = "001";
var cdnCode = new ConditionalModel() { FieldName = "m.Code", ConditionalType = ConditionalType.Like, FieldValue = searchVal };
var cdnMatName = new ConditionalModel() {
FieldName = "m.Code + '_' + IsNull(m.Name,'')", ConditionalType = ConditionalType.Like, FieldValue = searchVal,
CustomConditionalFunc = new customCdn(),
};
var cdns = new ConditionalCollections
{
ConditionalList = new List<KeyValuePair<WhereType, ConditionalModel>>
{
new KeyValuePair<WhereType, ConditionalModel>(WhereType.Or,cdnCode),
new KeyValuePair<WhereType, ConditionalModel>(WhereType.Or,cdnMatName),
}
};
qry = qry.Where(new List<IConditionalModel> { cdns });
var list = await qry.ToListAsync();查询脚本如下:
[Sql]:SELECT [Code] AS [Code] , [Name] AS [Name] , [Code]+ @Const0 +ISNULL([Name],@MethodConst1) AS [MatName] FROM [PubMaterial] [m] WHERE ( [m].[Code] LIKE @Conditm_Code1000 OR AND m.Code + '_' + IsNull(m.Name,'') like '%'+@cp2000+'%' )
[Pars]:
[Name]:@Conditm_Code1000 [Value]:%001% [Type]:String
[Name]:@cp2000 [Value]:001 [Type]:String
[Name]:@Const0 [Value]:_ [Type]:String
[Name]:@MethodConst1 [Value]: [Type]:String
cdnCode和cdnMatName条件对调顺序后脚本如下:
var cdns = new ConditionalCollections
{
ConditionalList = new List<KeyValuePair<WhereType, ConditionalModel>>
{
new KeyValuePair<WhereType, ConditionalModel>(WhereType.Or,cdnMatName),
new KeyValuePair<WhereType, ConditionalModel>(WhereType.Or,cdnCode),
}
};[Sql]:SELECT [Code] AS [Code] , [Name] AS [Name] , [Code]+ @Const0 +ISNULL([Name],@MethodConst1) AS [MatName] FROM [PubMaterial] [m] WHERE ( m.Code + '_' + IsNull(m.Name,'') like '%'+@cp1000+'%' OR [m].[Code] LIKE @Conditm_Code2000 )
[Pars]:
[Name]:@cp1000 [Value]:001 [Type]:String
[Name]:@Conditm_Code2000 [Value]:%001% [Type]:String
[Name]:@Const0 [Value]:_ [Type]:String
[Name]:@MethodConst1 [Value]: [Type]:String
热忱回答(3)
-
fate sta VIP0
2024/8/24SqlSugarCore 5.1.4.168-preview04
过五分钟后安装,已修复
0 回复 -
fate sta VIP0
2024/8/24勾一下预览
0 回复 -
Jackey VIP0
2024/9/10前段时间做项目没有及时上来看,已验证5.1.4.168-preview04版本此问题已解决,非常感谢
0 回复