Código repetitivo para un campo proyectado en una lambda -- # campo con performance campo con linq campo con lambda camp codereview Relacionados El problema

Repetitive code for a projected field in a lambda


0
vote

problema

Español

Tengo una proyección simple en mi código. Quitando la mayoría de los campos que no son de interés, parece lo siguiente:

  NSLog7  

Realmente no me gusta cómo uso NSLog8 Tres veces. Parece feo y la legibilidad es pobre.

¿Hay una manera de usar esto solo una vez mientras se hospeda en línea? Por inline, quiero decir que no quiero escribir ningún código fuera de la proyección.

Original en ingles

I have a simple projection in my code. Taking away the majority of the fields which are not of interest, it looks like the following:

var result = employments.Select(x => new EmpListItem         {             EndDate = x.EmpRelationship.OrderByDescending(y => y.EndTime).FirstOrDefault().CancelledBeforeTime ?                          x.EmpRelationship.OrderByDescending(y => y.EndTime).FirstOrDefault().CancelEndTime :                          x.EmpRelationship.OrderByDescending(y => y.EndTime).FirstOrDefault().EndTime,             JobType = x.JobType         }); 

I really dislike how I use x.EmpRelationship.OrderByDescending(y => y.EndTime).FirstOrDefault() three times. It looks ugly and readability is poor.

Is there a way to use this only once while staying inline? By inline I mean that I don't want to write any code outside of the projection.

           

Lista de respuestas

5
 
vote
vote
La mejor respuesta
 

Puede extraer esa llamada de repetición a una variable dentro de su Select .

  var result = employments.Select(x =>  {     var empRelationship = x.EmpRelationship.OrderByDescending(y => y.EndTime).FirstOrDefault();      return new EmpListItem     {         EndDate = empRelationship.CancelledBeforeTime ?                        empRelationship.CancelEndTime :                        empRelationship.EndTime,         JobType = x.JobType     }; });   

Esto también acelerará la ejecución.

El truco detrás de esto es recordar que puede ejecutar más de una sola declaración dentro de un lambda usando { y }9

 

You can extract out that repeat call to a variable inside your Select.

var result = employments.Select(x =>  {     var empRelationship = x.EmpRelationship.OrderByDescending(y => y.EndTime).FirstOrDefault();      return new EmpListItem     {         EndDate = empRelationship.CancelledBeforeTime ?                        empRelationship.CancelEndTime :                        empRelationship.EndTime,         JobType = x.JobType     }; }); 

This will also speed up execution.

The trick behind this is remembering you can execute more than just one statement inside a lambda by using { and }

 
 
       
       

Relacionados problema

16  ¿Función larga como una lambda, derecha o incorrecta? [cerrado]  ( Long function as a lambda right or wrong ) 
cerrado. Esta pregunta es off-topic . Actualmente no está aceptando respuestas. ¿Quieres ...

4  (C ++ 14) Estado de manejo en la función C-Style Pointer Callbacks  ( C14 handling state in c style function pointer callbacks ) 
Tengo algunos problemas que se presentan con una solución sensible para usar el estado compartido en un puntero de función de estilo C. Estoy usando GLFW para...

31  Llame dinámicamente Lambda en función de la entrada de la corriente  ( Dynamically call lambda based on stream input ) 
Algunos contexto: tengo código que parece este (problema menor notó aquí ): Statement select("SELECT * FROM People WHERE ID > ? AND ID < ?"); select.exec...

1  ¿Uso excesivo de lambda con variante de tamiz de eratóstenes?  ( Excessive use of lambda with variant of sieve of eratosthenes ) 
Esta es una función que produce la suma de números primos debajo (sin incluir) un cierto número (usando una variante en la tamiz de eratóstenes ). erastos...

7  Tubos elixir y funciones anónimas  ( Elixir pipes and anonymous functions ) 
Recientemente comenzó con Elixir. Estoy acostumbrado a los tubos de F # y Seq.map3 Y LINQ '9988776655544334 Las cosas son diferentes en Elixir, y el código...

2  Devolver el marco de la entidad de DateTime C # más reciente  ( Return most recent datetime c entity framework ) 
Job -> Many Quotes Quote -> EmailLogList EmailLogList -> Many EmailLogs Quiero devolver una fecha creada de un emaillo, que se ha creado más recientemen...

18  Uso efectivo de múltiples flujos  ( Effective use of multiple streams ) 
Estoy experimentando con arroyos y lambdas en Java 8. Esta es mi primer incursión grave utilizando conceptos de programación funcionales; Quisiera una crítica...

3  Coge todas las excepciones revisadas y conviértase en una excepción sin marcar  ( Catch all checked exceptions and turn into unchecked exception ) 
Actualmente estoy tratando de aprender a Lambdas y seguir el libro Java SE8 para que realmente sea impaciente y acaba de terminar el capítulo 1 de ella. Esta ...

15  Implementación básica de roca-papel-tijeras  ( Basic rock paper scissors implementation ) 
Decidí intentar realizar una implementación simple de RPS en Java 8, se deben decir las siguientes notas primero: En un punto posterior, debe apoyar a los ...

1  Validar campos en el diccionario de Python utilizando Dictionary of Lambdas  ( Validate fields in python dictionary using dictionary of lambdas ) 
Me encantaría algunos comentarios sobre esto. Lo uso para validar objetos de forma web antes de persistirlos en el mongodb peligrosamente perezoso. Tengo una ...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos