We are using EF 6.2 for .NET. We are trying the next query:
dbContext.memberScales
.Where(s => members.Contains(s.idMember))
.OrderByDescending(s => s.dateScale)
.Select(s => new MemberScaleBasicFields
{
id = s.idMember,
dateScale = s.dateScale,
weight = s.weight,
massMuscle = s.massMuscle,
massFat = s.massFat,
massBone = s.massBone,
imc = s.imc,
water = s.water,
dailyCalories = s.dailyCalories,
tmd = s.tmd,
physicalValuation = s.physicalValuation,
adiposity = s.adiposity,
assessment = s.assessment,
ageMetabolica = s.ageMetabolica
})
.ToList();
In the where clause, we have to filter for a list of long.
members.Contains(s.idMember)
When we see the query text, we get a query with hardcore values:
SELECT
[Extent1].[ValoracionFisica] AS [ValoracionFisica],
[Extent1].[IdSocio] AS [IdSocio],
[Extent1].[Fecha] AS [Fecha],
[Extent1].[Peso] AS [Peso],
[Extent1].[MasaMagra] AS [MasaMagra],
[Extent1].[MasaGrasa] AS [MasaGrasa],
[Extent1].[MasaOsea] AS [MasaOsea],
[Extent1].[IMC] AS [IMC],
[Extent1].[Agua] AS [Agua],
[Extent1].[CaloriasDiarias] AS [CaloriasDiarias],
[Extent1].[TMB] AS [TMB],
[Extent1].[Adiposidad] AS [Adiposidad],
[Extent1].[Valoracion] AS [Valoracion],
[Extent1].[EdadMetabolica] AS [EdadMetabolica]
FROM [dbo].[Socios_Bascula] AS [Extent1]
WHERE [Extent1].[IdSocio] IN (cast(1225789 as bigint), cast(1228549 as bigint), cast(1228557 as bigint), cast(1230732 as bigint)....
We want to know how to make this query parametrized. Or if there is any alternative to make this query without dropping cache plan. For example,
[Extent1].[IdSocio] IN (@value1, @value2...)
If we try make the
members.Any(x => x == s.idMember)
we get the next text
SELECT
[Extent1].[ValoracionFisica] AS [ValoracionFisica],
[Extent1].[IdSocio] AS [IdSocio],
[Extent1].[Fecha] AS [Fecha],
[Extent1].[Peso] AS [Peso],
[Extent1].[MasaMagra] AS [MasaMagra],
[Extent1].[MasaGrasa] AS [MasaGrasa],
[Extent1].[MasaOsea] AS [MasaOsea],
[Extent1].[IMC] AS [IMC],
[Extent1].[Agua] AS [Agua],
[Extent1].[CaloriasDiarias] AS [CaloriasDiarias],
[Extent1].[TMB] AS [TMB],
[Extent1].[Adiposidad] AS [Adiposidad],
[Extent1].[Valoracion] AS [Valoracion],
[Extent1].[EdadMetabolica] AS [EdadMetabolica]
FROM [dbo].[Socios_Bascula] AS [Extent1]
WHERE EXISTS (SELECT
1 AS [C1]
FROM (SELECT
cast(1225789 as bigint) AS [C1]
FROM ( SELECT 1 AS X ) AS [SingleRowTable1]
UNION ALL
SELECT
cast(1228549 as bigint) AS [C1]
FROM ( SELECT 1 AS X ) AS [SingleRowTable2]....