LINQ to SQL - Generare query IN utilizzando CONTAINS

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: ,

Tags:

ASP .NET | .NET

Add comment




  Country flag

biuquote
  • Comment
  • Preview
Loading