Petit quizz LINQ To SQL
Le code suivant :
using (var context = new DataClasses1DataContext())
{
int[] keyValues = { 1, 2, 3 };
var q = from p in context.Products
where keyValues.Contains(p.ProductID)
select p;
var r = new
{
Count = q.Count(),
CountCategory = (from p in q
select p.CategoryID).Distinct().Count(),
AverageUnitPrice = (from p in q
select p.UnitPrice).Average()
};
// Do something with r
}
a le défaut majeur de générer 3 requêtes SQL :
SELECT COUNT(*) AS [value]
FROM [dbo].[Products] AS [t0]
WHERE [t0].[ProductID] IN (@p0, @p1, @p2)
-- @p0: Input Int (Size = 0; Prec = 0; Scale = 0) [1]
-- @p1: Input Int (Size = 0; Prec = 0; Scale = 0) [2]
-- @p2: Input Int (Size = 0; Prec = 0; Scale = 0) [3]
SELECT COUNT(*) AS [value]
FROM (
SELECT DISTINCT [t0].[CategoryID]
FROM [dbo].[Products] AS [t0]
WHERE [t0].[ProductID] IN (@p0, @p1, @p2)
) AS [t1]
-- @p0: Input Int (Size = 0; Prec = 0; Scale = 0) [1]
-- @p1: Input Int (Size = 0; Prec = 0; Scale = 0) [2]
-- @p2: Input Int (Size = 0; Prec = 0; Scale = 0) [3]
SELECT AVG([t0].[UnitPrice]) AS [value]
FROM [dbo].[Products] AS [t0]
WHERE [t0].[ProductID] IN (@p0, @p1, @p2)
-- @p0: Input Int (Size = 0; Prec = 0; Scale = 0) [1]
-- @p1: Input Int (Size = 0; Prec = 0; Scale = 0) [2]
-- @p2: Input Int (Size = 0; Prec = 0; Scale = 0) [3]
Comment faire en sorte de n'exécuter qu'une seule requête SQL ?
Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :