查询条件为两个List的时候,如何实现查询? 返回
前端传的查询参数是一个List。例如是List<string> tag= new List<string> { "aaa", "bbb" };数据库中tag使用json格式进行保存, 例如保存的值是["bbb","ccc"]。在查询时,如何构造查询语句?
热忱回答(17)
-
飞飞 VIP0
2025/7/22
可以利用临时表传参,join关联来过滤条件
0 回复 -
倾斜的水瓶座 VIP0
2025/7/22使用这个方法,生成的SQL是 ON (1=2)。
具体的查询代码如下:
public async Task<SqlSugarPagedList<JsonOutput>> Page(JsonPageInput input) { var tps = Context.Reportable(input.Tag).ToQueryable(); var query = Context.Queryable<Json>() .InnerJoin(tps, (jt, t) => jt.Tag.Contains(t)) return await query.ToPagedListAsync(input.PageNum, input.PageSize); }input.Tag的数据为:List<string> tag= new List<string> { "加密" },Json表中Tag的数据为["加密","3000"],
Json实体类的Tag为/// <summary> /// 标签 ///</summary> [SugarColumn(ColumnName = "Tag", ColumnDescription = "标签", IsNullable = true, IsJson = true, Length = 500)] public List<string> Tag { get; set; }生成的SQL为:
SELECT * FROM (SELECT [jt].* ROW_NUMBER() OVER(ORDER BY [jt].[SortCode] ASC) AS RowIndex FROM [json] [jt] Inner JOIN ( SELECT N'加密' AS [ColumnName] ) [t] ON (1=2) ) ) T WHERE RowIndex BETWEEN 1 AND 10
0 回复 -
飞飞 VIP0
2025/7/22
第一个方法确实不行,只能用第二个方法了
0 回复 -
飞飞 VIP0
2025/7/22我以为它拼出来的sql语句是这样的,显然它这个还不是很好用
0 回复 -
fate sta VIP0
2025/7/22where(it=>List.Any(s=>s.xx==it.yy))
0 回复 -
倾斜的水瓶座 VIP0
2025/7/22@fate sta:it.yy是一个List<string> ,因此不能使用这个方法呀
0 回复 -
倾斜的水瓶座 VIP0
2025/7/22@飞飞:试了一下。使用第二种方式查询,生成的SQL语句,还是
SELECT * FROM (SELECT [jt].* ROW_NUMBER() OVER(ORDER BY [jt].[SortCode] ASC) AS RowIndex FROM [json] [jt] Inner JOIN ( SELECT N'加密' AS [ColumnName] ) [t] ON (1=2) ) ) T WHERE RowIndex BETWEEN 1 AND 10
这个。也是醉了。
0 回复 -
倾斜的水瓶座 VIP0
2025/7/22根据官方文档,使用下面的方法,生成的SQL语句是WHERE 1=2
Expressionable<Json> exp = Expressionable.Create<Json>(); foreach(var item in input.Tag) { if(item.NotEmptyOrNull()) { exp.Or(jt => jt.Tag.Contains(item)); } }真是疯了
0 回复 -
fate sta VIP0
2025/7/22string [] ids =xxx
where(it=>ids.Contains(it.id))
0 回复 -
fate sta VIP0
2025/7/22WHERE 1=2 是条件不成立。比如集合ids为空
0 回复 -
倾斜的水瓶座 VIP0
2025/7/22
使用官方给出的实例,生成的SQL语句 ,也是WHERE 1=2,不知道为啥
0 回复 -
fate sta VIP0
2025/7/22肯定是没进到 XX.Or逻辑 ,断点调试一下逻辑
0 回复 -
fate sta VIP0
2025/7/220 回复 -
倾斜的水瓶座 VIP0
2025/7/22// See https://aka.ms/new-console-template for more information //Console.WriteLine("Hello, World!"); using SqlSugar; using System; using static Azure.Core.HttpHeader; namespace OrmTest; class Program { static void Main(string[] args) { // Initialize SqlSugarClient var db = new SqlSugarClient(new ConnectionConfig { ConnectionString = "Server=127.0.0.1;Database=test;User=sa;Password=123456;MultipleActiveResultSets=True;Encrypt=True;TrustServerCertificate=True;", DbType = DbType.SqlServer, // Change to your database type IsAutoCloseConnection = true, }); var Names = new List<string> { "aaa" }; Expressionable<YourEntity> exp = Expressionable.Create<YourEntity>(); foreach (var item in Names) { exp.Or(it => it.Name.Contains(item.ToString())); } var list = db.Queryable<YourEntity>().Where(exp.ToExpression()).ToList(); } } public class YourEntity { public int Id { get; set; } [SugarColumn(ColumnName = "Name", ColumnDescription = "名称", IsNullable = true, IsJson = true, Length = 500)] public List<string> Name { get; set; } // Add other properties as needed }数据库信息

运行程序后生成的SQL语句:
exec sp_executesql N'SELECT [Id],[Name] FROM [YourEntity] WHERE (1=2) ',N'@MethodConst0 nvarchar(4000)',@MethodConst0=N'aaa'
使用的SqlSugar版本:5.1.4.198
使用的数据库:SQLSERVER 2019
0 回复 -
fate sta VIP0
2025/7/23你这个要用json函数
0 回复 -
fate sta VIP0
2025/7/23SqlFunc.JsonArrayAny(it.Name, item.ToString())
0 回复 -
倾斜的水瓶座 VIP0
2025/8/3@fate sta:用这个可以查询了,谢谢啦
0 回复