Asghwor
Asghwor

Reputation: 583

How to call builtin SQL Linq functions in EF Core?

I have a query written with Linq and EF Core 6 and I would like to call the builtin function EOMONTH on a date column.

Something like:

_context.Pet
    .Select(x => EOMONTH(x.birthDate))
    .DoStuff()
    .ToListAsync();

How can I actually get to call EOMONTH and any other builtin SQL function from Linq?

Upvotes: 0

Views: 1096

Answers (1)

bricelam
bricelam

Reputation: 30345

The EF Core documentation has a page that show function mappings between LINQ and SQL.

As of EF Core 6, it looks like EOMONTH isn't yet supported, but you can provide your own function mapping like this:

class MyContext : DbContext
{
    [DbFunction(IsBuiltIn = true)]
    public static DateTime EOMONTH(DateTime startDate)
        => throw new InvalidOperationException(
            "Don't call EOMONTH directly. It must to be translated to SQL " +
            "inside of a LINQ query.");
}
_context.Pet
    .Select(x => MyContext.EOMONTH(x.birthDate));

Note, lots of different styles are supported by EF. For example, it could also be an instance method. Read the docs to find the best way that works for you.

Upvotes: 4

Related Questions