查询条件为两个List的时候,如何实现查询? 返回

SqlSugar 沟通中
17 553

前端传的查询参数是一个List。例如是List<string> tag= new List<string> { "aaa", "bbb" };数据库中tag使用json格式进行保存, 例如保存的值是["bbb","ccc"]。在查询时,如何构造查询语句?

热忱回答17

  • 飞飞 飞飞 VIP0
    2025/7/22

    image.png

    可以利用临时表传参,join关联来过滤条件

    image.png

    0 回复
  • 使用这个方法,生成的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

    image.png

    第一个方法确实不行,只能用第二个方法了

    image.png

    0 回复
  • 飞飞 飞飞 VIP0
    2025/7/22

    我以为它拼出来的sql语句是这样的,显然它这个还不是很好用
    image.png

    0 回复
  • fate sta fate sta VIP0
    2025/7/22

    where(it=>List.Any(s=>s.xx==it.yy))

    0 回复
  • @fate sta:it.yy是一个List<string> ,因此不能使用这个方法呀

    0 回复
  • @飞飞:试了一下。使用第二种方式查询,生成的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 回复
  • 根据官方文档,使用下面的方法,生成的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 fate sta VIP0
    2025/7/22

    string [] ids =xxx


    where(it=>ids.Contains(it.id))

    0 回复
  • fate sta fate sta VIP0
    2025/7/22

    WHERE 1=2 是条件不成立。比如集合ids为空

    0 回复
  • image.png

    使用官方给出的实例,生成的SQL语句 ,也是WHERE 1=2,不知道为啥

    0 回复
  • fate sta fate sta VIP0
    2025/7/22

    肯定是没进到  XX.Or逻辑 ,断点调试一下逻辑


    0 回复
  • fate sta fate sta VIP0
    2025/7/22

    https://www.donet5.com/Home/Doc?typeId=2366


    还有疑问按模版提供DMEO, 目前功能是没有问题的

    0 回复
  • // 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
    }

    数据库信息

    image.png


    运行程序后生成的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 fate sta VIP0
    2025/7/23

    你这个要用json函数

    0 回复
  • fate sta fate sta VIP0
    2025/7/23

    SqlFunc.JsonArrayAny(it.Name, item.ToString())


     

    0 回复
  • @fate sta:用这个可以查询了,谢谢啦

    0 回复