Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

String interpolation in raw SQL methods, How is it possible?

Tags:

c#

I've just checked the new futures in Entity Framework Core 2.0. There is a really nice feature in it called "String interpolation in raw SQL methods" which is described here.

It says that this code:

var city = "Redmond";

using (var context = CreateContext())
{
    context.Customers.FromSql($@"
        SELECT *
        FROM Customers
        WHERE City = {city}");
}

creates this query:

SELECT *
FROM Customers
WHERE City = @p0

It is really strange to me! How FromSql method is written as it has just and input of type string.

How does it understand it is an interpolated string, and then create a parameter @p0 query for it? How can I write a method like FromSql aware of how its string parameters are created?

like image 938
mehrandvd Avatar asked Aug 15 '17 17:08

mehrandvd


1 Answers

The way it woks is FromSql( accepts a FormattableString.

When you use $"..." that returns a FormatableString, that class allows you to inspect the passed in string and see all of the { } blocks inside of and the objects they represent. This allows the framework to replace those { } blocks with a placeholder parameter @p0 then create a new parameter using something similar to new SqlParameter("@p0", formatableString.GetArgument(0))

like image 55
Scott Chamberlain Avatar answered Sep 17 '22 14:09

Scott Chamberlain