title: String interpolation in raw SQL methods, How is it possible?
body: <p>I've just checked the new futures in Entity Framework Core 2.0. There is a really nice feature in it called <em>"String interpolation in raw SQL methods"</em> which is described <a href="https://blogs.msdn.microsoft.com/dotnet/2017/08/14/announcing-entity-framework-core-2-0/" rel="noreferrer">here</a>.</p>
  
  <p>It says that this code:</p>
  
  <pre><code>var city = "Redmond";
  
  using (var context = CreateContext())
  {
      context.Customers.FromSql($@"
          SELECT *
          FROM Customers
          WHERE City = {city}");
  }
  </code></pre>
  
  <p>creates this query:</p>
  
  <pre><code>SELECT *
  FROM Customers
  WHERE City = @p0
  </code></pre>
  
  <p>It is really strange to me! How <code>FromSql</code> method is written as it has just and input of type string. </p>
  
  <p>How does it understand it is an interpolated string, and then create a parameter <code>@p0</code> query for it? How can I write a method like <code>FromSql</code> aware of how its string parameters are created?</p>