Is there something that can return IQueryable
for a dynamic sql query in Entity Framework 6?
This is what I am using now but it is pulling all the record
I know this question is about EF6 but in case somebody else stumbles upon this question but interested in EFCore, this is actually possible there.
Most simple example:
var user = new SqlParameter("user", "johndoe");
var blogs = context.Blogs
.FromSqlRaw("EXECUTE dbo.GetMostPopularBlogsForUser @user", user)
.ToList();
Parameters:
var user = new SqlParameter("user", "johndoe");
var blogs = context.Blogs
.FromSqlRaw("EXECUTE dbo.GetMostPopularBlogs @filterByUser=@user", user)
.ToList();
More complex example (this is more specifically what this question is asking for):
var searchTerm = ".NET";
var blogs = context.Blogs
.FromSqlInterpolated($"SELECT * FROM dbo.SearchBlogs({searchTerm})")
.Where(b => b.Rating > 3)
.OrderByDescending(b => b.Rating)
.ToList();
Resulting query for more complex example:
SELECT [b].[Id], [b].[Name], [b].[Rating]
FROM (
SELECT * FROM dbo.SearchBlogs(@p0)
) AS b
WHERE b."Rating" > 3
ORDER BY b."Rating" DESC
A few notes about this method:
SELECT *
to make sure all columns are returned from the table.Include
does in normal SQL queries (not necessarily stored proc/function calls).