'Entity Framework translate method call

I'm using Entity Framework core 6 with SQL Server. I have the following query:

dbContext.Table1
    .Where(t1 => some_condition(t1.some_property))
    .Select(t1 => new
    {
       Field1 = t1.some_property,
       Field2 = dbContext.Table2.Where(t2 => some_condition(t1.some_property, t2.some_property)).First(), // <-- this is my question
    });

The thing is that this subquery dbContext.Table2.Where(t2 => some_condition(t1, t2)).First(), is used in many other places. I need to extract it somehow and call it instead of copy-pasting it everywhere.

I tried to extract it in a function like this:

public string Get(string some_property) => context.Table2
    .Where(t => some_condition(some_property, t.some_property))
    .First();
dbContext.Table1
    .Where(t1 => some_condition(t1.some_property))
    .Select(t1 => new
    {
       Field1 = t1.some_property,
       Field2 = Get(t1.some_property)
    });

But with that I get the subquery to execute separately and for every element in the collection (N+1 problem. I was expecting it though).

Is there a way to achieve that ? maybe using expression trees (which I'm not yet very familiar with).



Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source