none
Select EF RRS feed

  • Pregunta

  • Hola a todos/as

    Tengo una duda a ver si me podéis ayudar. Me han dejado un proyecto y las queries creo que están hechas en EF7. El caso es que tengo esto:

    newAccount.ParentAccount = IntegrationContext.Accounts.Where(a => a.IsGroup && a.ClientNumber == newAccount.Group).FirstOrDefault();

    Lo que hace aquí, si no me equivoco, es traerse todos los campos de la tabla. Lo que yo quiero es traerme determinados campos. He probado esto y me da error:

    newAccount.ParentAccount = IntegrationContext.Accounts.Where(a => a.IsGroup && a.ClientNumber == newAccount.Group).select (a => a.CAMPO1, a => a.CAMPO2).FirstOrDefault(); 

    Pero el a => a.CAMPO2 no me lo reconoce y el Intellisense propone escribir addOrUpdateAccount.

    Mi pregunta es: Cómo puedo traerme sólo los campos que necesito?? 

    Pues nada, si alguien me puede iluminar, le estaría agradecido

    Saludos!


    • Editado CrepuX jueves, 4 de febrero de 2016 13:02
    jueves, 4 de febrero de 2016 13:01

Respuestas

  • >>Pero el a => a.CAMPO2 no me lo reconoce y el Intellisense propone escribir addOrUpdateAccount.

    recuerda que alli defines un tipo anonimo, si la ides es pasar esto fuera del metodo donde defines el linq no vas a tener intellisense

    sino vas a tener que definir una clase

    public class xxClass{
    
       public string Campo1 {get;set;}
    
       public string Campo2 {get;set;}
    
    }

    y usar

    newAccount.ParentAccount = IntegrationContext.Accounts
        .Where(a => a.IsGroup && a.ClientNumber == newAccount.Group)
        .Select (a => new xxClass() { Campo1 = a.CAMPO1, Campo2 = a.CAMPO2 } )
        .FirstOrDefault(); 

    de esta forma puedes devolver una clase tipada

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    • Marcado como respuesta CrepuX martes, 9 de febrero de 2016 12:46
    jueves, 4 de febrero de 2016 13:16

Todas las respuestas

  • >>Pero el a => a.CAMPO2 no me lo reconoce y el Intellisense propone escribir addOrUpdateAccount.

    recuerda que alli defines un tipo anonimo, si la ides es pasar esto fuera del metodo donde defines el linq no vas a tener intellisense

    sino vas a tener que definir una clase

    public class xxClass{
    
       public string Campo1 {get;set;}
    
       public string Campo2 {get;set;}
    
    }

    y usar

    newAccount.ParentAccount = IntegrationContext.Accounts
        .Where(a => a.IsGroup && a.ClientNumber == newAccount.Group)
        .Select (a => new xxClass() { Campo1 = a.CAMPO1, Campo2 = a.CAMPO2 } )
        .FirstOrDefault(); 

    de esta forma puedes devolver una clase tipada

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    • Marcado como respuesta CrepuX martes, 9 de febrero de 2016 12:46
    jueves, 4 de febrero de 2016 13:16
  • Hola Leandro,

    Gracias por responder. La clase la tengo, con sus correspondientes properties:

    public class Clase : Entity

    {

    public string FiscalName { get; set; } ,

    public string street { get; set; } ,

    public bool IsGroup { get; set; },

    public string ClientNumber { get; set; }

    ...........

    }

    Lo que no quiero es llevar el campo IsGroup por ejemplo. Entiendo entonces que si no quiero llevar por ejemplo el campo IsGroup debo hacer

    newAccount.ParentAccount = IntegrationContext.Accounts
        .Where(a => a.IsGroup && a.ClientNumber == newAccount.Group)
        .Select (a => new Clase() {FiscalName = a.FiscalName, street= a.street, ClientNumber = a.ClientNumber } )
        .FirstOrDefault(); 

    Es correcta mi interpretación??

    Muchas gracias 




    • Editado CrepuX jueves, 4 de febrero de 2016 13:54
    jueves, 4 de febrero de 2016 13:48
  • porque Clase hereda de Entity ? es una class que vas a usar para persistir

    el resto es correcto

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    jueves, 4 de febrero de 2016 13:56
  • La clase entity es una clase abstracta que tengo con más propiedades de forma que en la query original también está cogiendo los "campos" de esa clase. No se si respondo a tu pregunta o si te he entendido mal...

    Voy a probar con lo que me has dicho y te comento.

    Saludos!

    jueves, 4 de febrero de 2016 14:03
  • >>No se si respondo a tu pregunta o si te he entendido mal

    ahh ok pense que hera una herencia relacionada con EF, por tratarse de una clase que solo devolveras con datos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    jueves, 4 de febrero de 2016 14:38