2009-01-03 17 views

Respuesta

16

Delphi 2009 tiene genéricos, ayudantes de clase y anónima de apoyo método, pero no lambda, métodos de extensión o tipo de inferencia. Las expresiones de Lambda probablemente vendrán en una versión futura de Delphi, pero aún no están en el mapa oficial (una nueva debería llegar pronto con suerte). Además, Delphi para Win32 no tiene acceso a todas las bibliotecas LINQ.

Así que la respuesta corta es NO, no se puede hacer LINQ en Win32 Delphi. Sin embargo, puede hacer algunas cosas similares e incluso puede acceder técnicamente a LINQ a través de COM (como puede hacer con cualquier clase de .NET), pero de alguna manera vencería el punto sin la excelente sintaxis de LINQ.

LINQ es realmente una tecnología .NET. Si bien es probable que Delphi desarrolle las funciones de lenguaje que hacen que LINQ sea posible, las bibliotecas .NET subyacentes son solo para el desarrollo de .NET.

Sugeriría usar RemObject Data Abstract o similar.

+0

Umm ... ¿no son los métodos de extensión y los ayudantes de clase dos nombres para exactamente lo mismo? La única diferencia es que uno de ellos se usa en Delphi y el otro se usa en C#, o hay alguna parte crítica de la funcionalidad que estoy pasando por alto? –

+0

Los Ayudantes de clase solo se aplican a una clase. Los métodos de extensión son un poco más amplios. Son muy similares, y probablemente puedas hacerlo con Class Helpers, pero requeriría más código. –

3

Sí y No. LINQ realmente pueden ser considerados como dos elementos diferentes.

La primera es la sintaxis de consulta similar a SQL. Es lo que le permite escribir lo siguiente en C#.

var query = from it in "foobar" select Char.ToUpper(it); 

Para que Delphi use esta versión de LINQ, necesitaría agregar soporte de sintaxis explícito. AFAIK esto no existe.

Sin embargo, todas las consultas de LINQ se traducen en un conjunto de expresiones de consulta. Estos típicamente implican un uso intensivo de expresiones lambda y cierres. El código anterior es equivalente a la siguiente versión de sintaxis no SQL.

var query = "foobar".Select(x => Char.ToUpper(x)); 

no sé el nivel de lambda o delegar el apoyo en Delphi pero debe ser posible acceder a LINQ en este método desde Delphi.

+2

- tiene un pequeño error, debe reemplazar "it" por "x". Delphi Win32 carece de casi todas las características que hacen que funcione el segundo ejemplo. No hay VAR. string y char no son objetos, y usted no tiene la breve sintaxis de las expresiones lamda. Entonces, si puedes hacerlo, sería mucho más feo. –

+0

@mliesen, gracias corrigió el error tipográfico. – JaredPar

1

No sé en qué versión de Delphi apareció, pero en XE tenemos 'funciones de objeto' que se pueden hacer como cierres o casi expresiones lambda iguales.

Por lo tanto, a partir de hoy (26/06/2011) es cerca de posible tener expresiones tipo LINQ en Delphi (la 2ª forma).

+2

¿Qué quiere decir con "funciones de objeto"? –

Cuestiones relacionadas