Welcome to Scribd, the world's digital library. Read, publish, and share books and documents. See more
Download
Standard view
Full view
of .
Look up keyword
Like this
14Activity
0 of .
Results for:
No results containing your search query
P. 1
LINQ

LINQ

Ratings:

5.0

(1)
|Views: 1,067|Likes:
Published by jaircazarin
Describe algunos nuevos features de .net 3.0 y lo que será LINQ
Describe algunos nuevos features de .net 3.0 y lo que será LINQ

More info:

Published by: jaircazarin on Jun 16, 2007
Copyright:Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as PDF, TXT or read online from Scribd
See more
See less

01/01/2013

pdf

text

original

 
LINQ: Language Integrated Query
LINQ[1]es una extensión a los lenguages del .NET Framework, C# y Visual Basic .NET, planeada para ser lanzada conOrcas [2]en este año. El objetivo de LINQ es el de proveer a este par de lenguages de programación la posibilidad de hacer queriesnativamente desde el lenguaje, esto quiere decir ya no lidiar con SqlCommand, SqlDataReader, y demás objetos.Para muestra, un ejemplo dónde se obtienen de un array de enteros los que son menores a 5:
public voidLinq1() {  int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };var lowNums =from ninnumberswhere n < 5select n;Console.WriteLine("Numbers < 5:"); foreach(var xinlowNums) { Console.WriteLine(x);}}
Esto quiere decir, que LINQ no solo fue hecho para atacar el problema del miss-match entre las bases de datosrelacionales y los lenguajes de programación orientados a objetos, sino que funciona para cualquier clase queimplemente la intefaz IEnumerable[3](Cualquier collection actualmente lo hace) e incluso también está hecho paraproporcionar todo el poder de Xquery[4]y Xpath[5]pero built-in en el lenguaje. Para lograr todo esto LINQ utiliza las siguientes características del framework (Que también son nuevas):
Anonymous Types.
Extension Methods.
Lambda Expressions.
Expression Trees.
Standard Query Operators.
 
Anonymous Types
Los anonymous types son un
feature
del .Net Framework 3.0 que permite crear tuplas ó tipos de datos inexistentesautomáticamente en tiempo de compilación. Pareciera complicado, pero es bastante sencillo. Lo que sucede es que sinecesitamos un objeto que contenga las propiedades “Nombre” y “Apellido”, por ejemplo para obtener los nombres yapellidos de una lista de trabajadores guardada en una base de datos en SQL Server, normalmente lo que tendríamosque hacer es crear nuestra
class
ó
struct 
Trabajador, con estas 2 propiedades. Lo que nos permiten los AnonymousTypes, es solo asignar las propiedades que queramos a un
object initializer 
con el
keyword var 
y el compiladorautomáticamente creará esta clase, con sus respectivas properties en tiempo de compilación.Por ejemplo:
var p1 =new{Name ="Jair", LastName ="Cazarin"};
Y nuestro compilador de C# 3.0 nos producirá algo así:
class __Anonymous1{ private stringname ;  private stringlastName;  public stringName{get{returnname; }set{ name =value; } }  public stringLastName{get{returnlastName; }set{ lastName=value; } } }__Anonymous1 p1 =new__Anonymous1();p1.Name ="Jair";p1.LastName ="Cazarin";
Extension Methods
Seguramente se preguntaron, cuando vieron el primer ejemplo, de dónde salieron los
keywords
select, y where si unarray no tiene estos todos, y la respuesta es usando
Extension Methods
. Y el objetivo de los mismos esprecisamente ese, el de extender métodos y clases ya existentes. Ahora deben estar pensando, y no para eso era laherencia? Así es, pero uno de los problemas es que cuando no se tiene acceso al código fuente, se vuelve muylimitado ya que muchas clases restringen la herencia o a ciertas propiedades (
Sealed Class
 [6]).Para hacerlo solo necesitamos usar el
keyword 
 
this
en el argumento del método y que el método sea
static 
. Ejemplo:
static class Program { static voidMain(string[] args) { strings ="Hello, world"; s.Print();} static voidPrint(this strings) {Console.WriteLine(s);}}
En este caso estamos añadiendole la funcionalidad de
Print 
a un
string
.
Lambda Expressions
Las
lambda Expressions
están basados en el
Lambda Calculus
 [7]el cual viene desde mucho tiempo atrás en losinicios de la computación y son una característica muy importante de los lenguajes funcionales como Lisp[8], fuecreado por Alonzo Church y Stephen Cole Kleene (Si, el de la cerradura de Kleene).Lo que nos proporcionan las
Lambda Expressions
en C# son una forma más limpia de declarar lo que lanzó Microsoften .net 2.0:
 Anonymous Methods
. Y para LINQ nos sirve para hacer expresiones muy poderosas y elegantes dentro del
statement where
, solo como un ejemplo. Para tener una idea más clara de lo que son, supongamos como se haría undelegate con Anonymous Methods:
 
delegateTFunc<T>(T t); Func<int> funcDel =delegate(intx) { returnx + x;};
Y con lambda expressions sería así:
Func<int> lambda = x => x + x;
Mucho más sencillo, y para llamarlo solo necesitamos poner: lambda(1); por ejemplo.
Expression Trees
Esto es uno de los
features
más complicados, pero para los que han programado alguna vez en LISP no necesitanninguna explicación. Y se basa en el hecho de manejar expresiones (
Lambda Expressions
) como estructuras de datosen lugar de código ejecutable y añade un gran poder a las
Lambda Expressions
. Como vimos, un
Lambda expression
se puede declarar como código ejecutable y se puede usar simplemente como una función más. Sin embargo cuandose usan mediante System.Query.Expression (
Expression Tree
) el delegate no es compilado en código ejecutable sinocomo datos que son convertidos y compilados en el delegate original. Para usarla se deben compilar e invocarexplicitamente en la aplicación.
Func<int,int> f = x => x + 1; Expression<Func<int,int>> expression = x => x + 1
Para usarla:
var originalDelegate = expression.Compile();var three = originalDelegate.Invoke(2);
En el caso de LINQ sirve para poder llamar a funciones dentro de
queries
.
Standard Query Operators
Por último está el Standard que define las operaciones que se pueden hacer, mediante el uso de Extension Methods, yque nos proporciona cosas como esta:
int[] nums =new int[] {1,2,3,4,5,6,7,8,9}; doubleavg = nums.Average(); 
Para obtener la lista completa del Standard, descargar el archivo Standar Query Operator Documentation[9]del sitiode Microsoft.Muchos personas piensan que los lenguajes de .net principalmente C# cada vez se está volviendo más tipo C++, peroyo al contrario pienso que C# se está volviendo más perfecto cada vez que sacan una nueva versión. En este caso laintegración de query-syntax dentro del lenguaje se me hace extraordinario y que ningún lenguaje hasta ahorita hahecho.Ya para finalizar algunos ejemplos más:
publicvoid Linq() {List products = GetProductList();List customers = GetCustomerList(); var productFirstChars =from pinproductsselect p.ProductName[0];var customerFirstChars =from cincustomersselect c.CompanyName[0]; var commonFirstChars = productFirstChars.Intersect(customerFirstChars);

Activity (14)

You've already reviewed this. Edit your review.
1 hundred reads
1 thousand reads
Pandora9666 liked this
Pandora9666 liked this
tavozq liked this
Maritza Cueva liked this
lucasmoraes81 liked this
vitubiolu liked this
Enrique liked this

You're Reading a Free Preview

Download
scribd
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->