var strSql = new StringBuilder(); strSql.Append("SELECT "); strSql.Append(fieldSql.Replace("t.F_Password,", "").Replace("t.F_Secretkey,", "")); strSql.Append(" FROM LR_Base_User t WHERE t.F_DeleteMark = 0 AND t.F_CompanyId = @companyId ORDER BY t.F_DepartmentId,t.F_RealName "); return this.BaseRepository().FindList<UserEntity>(strSql.ToString(), new { companyId = companyId }); 怎么优化
时间: 2024-03-26 12:35:21 浏览: 21
可以使用SQL的CASE语句来实现选择性地查询字段,避免在代码中对字符串进行替换操作。示例如下:
```
var strSql = new StringBuilder();
strSql.Append("SELECT ");
strSql.Append("CASE WHEN @showPassword = 1 THEN t.* ELSE ");
strSql.Append("CAST(JSON_QUERY('{\"F_Id\": \"' + CAST(t.F_Id AS NVARCHAR(MAX)) + '\", \"F_Account\": \"' + t.F_Account + '\", \"F_RealName\": \"' + t.F_RealName + '\", \"F_NickName\": \"' + t.F_NickName + '\", \"F_HeadIcon\": \"' + t.F_HeadIcon + '\", \"F_Mobile\": \"' + t.F_Mobile + '\", \"F_Email\": \"' + t.F_Email + '\", \"F_Gender\": \"' + CAST(t.F_Gender AS NVARCHAR(MAX)) + '\", \"F_Birthday\": \"' + CONVERT(NVARCHAR(MAX), t.F_Birthday, 120) + '\", \"F_Signature\": \"' + t.F_Signature + '\", \"F_OrganizeId\": \"' + CAST(t.F_OrganizeId AS NVARCHAR(MAX)) + '\", \"F_DepartmentId\": \"' + CAST(t.F_DepartmentId AS NVARCHAR(MAX)) + '\", \"F_RoleId\": \"' + CAST(t.F_RoleId AS NVARCHAR(MAX)) + '\"}') AS NVARCHAR(MAX)) ");
strSql.Append("END AS UserInfo ");
strSql.Append("FROM LR_Base_User t ");
strSql.Append("WHERE t.F_DeleteMark = 0 AND t.F_CompanyId = @companyId ");
strSql.Append("ORDER BY t.F_DepartmentId, t.F_RealName");
return this.BaseRepository().FindList<UserEntity>(strSql.ToString(), new { companyId = companyId, showPassword = false });
```
这样就可以根据showPassword参数的值,选择性地返回包含F_Password字段或不包含F_Password字段的UserEntity对象集合了。需要注意的是,这里使用了SQL Server 2016及以上版本的JSON_QUERY函数,将UserEntity对象转换为JSON字符串,然后再转换为NVARCHAR类型的数据返回。如果使用的是SQL Server 2014或更早版本,可以使用FOR XML PATH('')或OPENJSON函数等方式来实现类似的功能。