visual una studio plantilla paginas pagina net maestras maestra crear como asp aplicaciones c# linq distinct keyword

una - paginas maestras en asp.net c#



¿Por qué LINQ no incluye una palabra clave "distinta"? (3)

Charlie Calvert tiene una publicación en el blog ("Uso de Distinct y Evitar Lambdas") que discute el problema. Desde la parte superior del post:

  1. La mayoría de los operadores de consulta, como Select() , Where() y GroupBy() toman como parámetro algo llamado lambda.
  2. Las Lambdas son difíciles de escribir.
  3. Las expresiones de consulta se crearon en gran parte para permitir a los desarrolladores utilizar LINQ sin tener que aprender la compleja sintaxis asociada con las lambdas.
  4. Algunos operadores de consulta, como Distinct() , no toman lambdas como parámetros. Como resultado, son fáciles de llamar.
  5. Por lo tanto, las expresiones de consulta no se crearon para operadores como Distinct() que no toman lambdas.

Y también, desde más abajo en el post:

Los operadores de consulta son llamadas de método. En otras palabras, hay métodos en la API de LINQ llamados Select() , Group() , Distinct() , etc. Normalmente no llamamos a estos métodos directamente porque toman lambdas como parámetros, y muchas personas encuentran que las lambdas son difíciles. comprender. Para ayudar a los desarrolladores a evitar la compleja tarea de escribir las lambdas, el equipo inventó las expresiones de consulta, que son un "azúcar sintáctica" que se encuentra encima de las lambdas.

TL; DR: No hay distinct palabra clave distinct para simplificar, ya que distinct no tiene una expresión lambda.

NOTA: Antes de que lea o proporcione una respuesta, sé sobre Enumerable.Distinct , le pregunto sobre el soporte de idioma específico para ese método, no sobre el método en sí.

Siempre me he preguntado por qué no hay distinct palabra clave distinct en el conjunto de palabras clave C # LINQ para que pueda escribir:

var items = distinct from x in y select x;

o

var items = from x in y select distinct x;

¿Alguien sabe por qué no se incluyó esto o por qué sería una mala idea incluirlo? Simplemente me parece incómodo que tenga que ajustar la consulta para llamar a Distinct() ; Una palabra clave distinct se sentiría más natural.

NOTA: Sé que el método Distinct tiene invalidaciones para proporcionar un comparador si es necesario, pero una palabra clave que use el comparador predeterminado sería excelente. Incluso podría imaginar una combinación distinct by palabra clave para poder proporcionar un operador de comparación en línea a la consulta.


En VB, en realidad hay .

Dim l = From x In {1, 2, 3, 2, 4, 2} Distinct Select x

No sospecho que haya habido una decisión activa contra distinct para C #, simplemente no se ha implementado.


Reword: distinct es un operador de conjunto ... los operadores de conjunto no toman lambdas como parámetros. El equipo de c # decidió ofrecerle accesos directos a los métodos que utilizan lambdas, como Select() y Group() , porque consideraron que las lambdas pueden ser confusas para las personas que recién comienzan. .Distinct() no toma un lambda, por lo que queda claro cuando lo llama directamente.

Una buena lectura sobre el tema:
http://blogs.msdn.com/b/charlie/archive/2006/11/19/linq-farm-group-and-distinct.aspx