I am in a application where Parameterized Sql queries are not written. Below is code block
  public List<MyClass> GetData(int Id, IEnumerable<string> state)
    {
        using (var dataContext = new DataContext(_connectionString)) 
            {
            var query = new StringBuilder("SELECT * FROM table");
            query.Append(" Id = ");
            query.Append(Id);
            query.Append(" AND state IN ('");
            query.Append(string.Join("','", state));
            query.Append("')");
            return dataContext.ExecuteQuery<MyClass>(query.ToString()).ToList();
     }
I am refactoring code using parameterized query like this :
    public List<MyClass> GetData(int Id, IEnumerable<string> state)
    {
      using (var dataContext = new DataContext(_connectionString)) 
        {
            var statestring = new StringBuilder("'");
            statestring.Append(string.Join("','", state));
            statestring.Append("'");
             string myStates= statestring.ToString();
            string query = "SELECT * FROM table WHERE Id ={0} AND state IN ({1})";
            return dataContext.ExecuteQuery<MyClass>(query, new object[] {Id, myStates}).ToList();
         }
     }
I get no data on running this query. On debugging i found my query is getting formed like this
  SELECT * FROM table WHERE Id ={0} AND state IN ({1}) where in ({1}) 
For state I see data as "'error',' warning'". In sql server I run query like this
   SELECT * FROM table   WHERE Id =34 AND state IN ('error','warning').
Do i need to remove " " around mystate? I tried removing " using trim method and assigning it back to string but it didn't work. I can still see double quotes.
  myStates = myStates.trim('"');
How can parameterize my query better without using any string builder for the same
 
     
     
     
    