How do you use the MySql IN clause

后端 未结 3 621
梦毁少年i
梦毁少年i 2020-12-21 09:05

I am trying to figure out how to use the MySql In cluse with ASP.NET C#. Here is my code

var WebSites = string.Join(\",\", wsl.Select(x => \"\'\" + x.Doma         


        
相关标签:
3条回答
  • 2020-12-21 09:23

    I have found the answer. Here it is

        public static IList<Post> FindPostsByWebSiteList(string[] urls)
        {
            var pl = new List<Post>();
            var urlArray = urls.Select((x,y) => "@url" + y.ToString()).ToArray();
            var urlsJoined = string.Join(",", urlArray);
            string q = string.Format("select Id, Url, Title, Date, ImageUrl from post where WebSiteUrl IN ({0})", urlsJoined);
    
            using (MySqlConnection con = new MySqlConnection(WebConfigurationManager.ConnectionStrings["MySqlConnectionString"].ToString()))
            {
                using (MySqlCommand cmd = new MySqlCommand(q, con))
                {
                    for (int x = 0; x < urlArray.Length; x++)
                    {
                        cmd.Parameters.Add(urlArray[x], MySqlDbType.Text).Value = urls[x];
                    }
    
                    con.Open();
    
                    var reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
                    while (reader.Read())
                    {
                        var p = new Post();
                        p.Id = reader.GetInt32("Id");
                        p.Url = reader.GetString("Url");
                        p.Title = reader.GetString("Title");
                        p.Date = reader.GetDateTime("Date");
                        p.ImageUrl = reader.GetString("ImageUrl");
                        pl.Add(p);
                    }
                    return pl;
                }
            }
        }
    
    0 讨论(0)
  • 2020-12-21 09:27

    You have referenced @Url instead of @Urls

    maybe just a typo in your question though

    0 讨论(0)
  • 2020-12-21 09:31

    The IN statement should expect an Array of strings, and you are passing a single string

    Your final SQL is looking like this:

    select Id, Url, Title, Date, ImageUrl from post where WebSiteUrl IN ('url1,url2,url3')
    

    Instead of

    select Id, Url, Title, Date, ImageUrl from post where WebSiteUrl IN ('url1', 'url2', 'url3')
    

    Check this question:

    Add List<int> to a mysql parameter

    0 讨论(0)
提交回复
热议问题