by Andrea
29 July 2008 23:02
Oggi mi sono trovato ad affrontare un problema di quelli banali, ma che (come al solito) mi ha fatto perdere un bel pò di tempo.
Il mio problema era ricavare un elenco di ID e Title dato un array di questi ID.
In SQL quello che avrei fatto sarebbe stato semplicissimo e con l’operatore IN avrei rislto in questo modo:
select id, title from Pages where id in (1,2,3,8,9)
Nel progetto a cui stò lavorando stò però utilizzando LINQ to SQL e trovare l’equivalente query è stata davvero dura (è il primo progetto dove uso seriamente LINQ to SQL), ma alla fine grazie al Contains sono riuscito a trovare la soluzione:
int[] pagesID = new int[] {1,2,3,8,9};
var pages = (from p in dc.Pages
where pagesID.Contains(p.ID)
select new { p.ID, p.Title });
Questa invece è la query generata da LINQ per recuperare i dati, che come vedete è simile a quella che avremmo realizzato noi:
exec sp_executesql N'SELECT [t0].[id] AS [ID], [t0].[Titolo] AS [Title]
FROM [dbo].[Pages] AS [t0]
WHERE [t0].[id] IN (@p0, @p1)',N'@p0 int,@p1 int',@p0=701,@p1=694
La soluzione è davvero banale, ma lo posso dire solo ora, dopo che ci ho sbattuto la testa, e la posto qui nel caso servisse anche a qualcuno di voi, o a me nel caso perdessi la memoria. ;-)
Lo spunto per la soluzione l’ho trovata in questo post: Creating IN Queries With Linq To Sql
Technorati Tags:
LINQ,
Contains
1401c961-9f14-4e1f-bee8-2d3c9d31f12c|0|.0
Tags:
ASP .NET | .NET