Consulta a Variable EntityFramework

Quiero traer solo algunos campos de lo que me trae la consulta,

 var result = dbContext.Cliente.Include("Contacto.Cliente").ToList();

esto me trae lo siguiente :

 "Objects": [
{
  "IdCliente": 3,
  "Identificacion": 10,
  "Nombre": "Ebony Kemp",
  "Direccion": "855-3865 Ipsum Street",
  "Telefono": "1626010138799",
  "Estado": true,
  "FechaCreacion": "2012-06-18T10:34:09",
  "FechaModificacion": "2012-06-18T10:34:09",
  "UsuarioCreacion": "7a4f4875-0c70-fa98-b29b-331ff027fd67",
  "UsuarioModificacion": "44a1e2b1-2be6-fad2-84e1-6eb3cec55cc0",
  "Contacto": [
    {
      "IdContacto": 2,
      "Nombres": "juan",
      "Apellidos": "hincapie",
      "Direccion": null,
      "Telefono": "555555",
      "Email": null,
      "Estado": true,
      "IdCliente": 3,
      "IdTipoContacto": 1,
      "FechaCreacion": null,
      "FechaModificacion": null,
      "UsuarioCreacion": null,
      "UsuarioModificacion": null
    }
  ]
},

Pero quiero que solo me retorne : cliente : Identificacion y Nombre Contacto : Nombres pero solo los que esten en estado true y que tengan el IdTipoContacto : 1 (El idTipoContacto esta relacionado con una tabla TipoContacto),

Adicionalmente, tendría que devolver una lista de tipo Cliente(no una anónima)

Podrían Ayudarme en como traer solo esos datos con la mejor practica posible? Gracias!

0
задан 05.09.2016, 18:11
3 ответа

Для этого ты будешь должен реализовывать более конкретный linq

var result = from c in dbContext.Cliente
             select new {
                Identificacion = c.Identificacion,
                Nombre =c.Nombre,
                Contacto = c.Contacto.Where(x=> x.Estado && x.IdTipoContacto == 1)
                                        .Select(x=> x.Nombres )
            };

в этом случае одинокий defiens поля, в которых ты нуждаешься и выдаешь контакты, ассоциируемые с клиентом. Предполагается, что между клиентом и Вашими контактами есть связь, что позволяет переходить с одного сайта на другой ассоциация.

А ты хочешь возвратить анонимный объект у тебя будет, что он создает класс, как то, чтобы быть:

public class ClienteDto{
   public int Identificacion {get;set;}
   public string Nombre {get;set;}
   public string Contacto {get;set;}
}

тогда linq было бы

var result = from c in dbContext.Cliente
             select new ClienteDto() {
                Identificacion = c.Identificacion,
                Nombre =c.Nombre,
                Contacto = c.Contacto.Where(x=> x.Estado && x.IdTipoContacto == 1)
                                        .Select(x=> x.Nombres )
            };
1
ответ дан 24.11.2019, 13:30
  • 1
    Леандро, Я Понимаю твой ответ и функционируй в perfecci и # 243; n, но идеальное состоит в том, чтобы не возвращать список an и # 243; nima, если не список Клиента, ты можешь помогать мне в этой точке porfavor? – Kmiilo Berrio Montoya 05.09.2016, 17:53
  • 2
    но если ты последовательно преобразовываешь в json, он не затрагивает, что это был анонимный список. А ты будешь должен создавать класс, чтобы выравнивать данные – Leandro Tuttini 05.09.2016, 18:06
  • 3
    издайте ответ добавляя альтернативу, которая не возвращает анонимный объект – Leandro Tuttini 05.09.2016, 18:09
  • 4
    Если echo у меня есть класс, поэтому я, должно быть, возвращаю класс в этом случае был бы класс клиентом, но уже с этими данными о консультации, ты можешь давать мне ссылку, как я могу выравнивать данные в этом классе? – Kmiilo Berrio Montoya 05.09.2016, 18:09

Реализовывая консультацию с LINQ ты можешь решать проблему:

var elementos= from cliente in dbContext.Cliente
               Join contacto in dbContext.Contacto on contacto.IdCliente equals cliente.IdCliente
               Where contacto.Estado==true && contacto. IdTipoContacto == 1
Seletc new
{
identificacion=cliente.Identificacion
clienteNombre=cliente.Nombre
contactoNombre=contacto.Nombre
};
return elementos.toList();

Это возвращает тебе список анонимных objectos с полями - идентификация,-clienteNombre,-contactosNombre....

0
ответ дан 24.11.2019, 13:30
  • 1
    что происходит, если у тебя есть клиент, у которого есть единственный контакт в false? если ты определяешь where на этом уровне, клиент никогда не появился бы как ответ. Я понимаю, что идея состоит в том, чтобы они появились весь клиент, имейте или нет контакты, но если это у них есть, что mueste только они estado=true и напряженный тип = 1 – Leandro Tuttini 05.09.2016, 16:24
  • 2
    Точный @LeandroTuttini это - то, чего я хочу добиться! – Kmiilo Berrio Montoya 05.09.2016, 17:39
  • 3
    он понял все клиенты с контактами, которые выполняли это условие.... – Frank Núñez Rodríguez 05.09.2016, 18:34

Для которого ты желаешь podrГ-туз создавать класс, где он представит тебе данные, которых ты желаешь: Например:

 class ClientePresenter
    {
public ClientePresenter(){}
    public int Id{get;set;}//esto para tener referencia de que registro es..
    public int Identificacion{get;set;}
    public string clienteNombre{get;set;}
    public string contactoNombre{get;set;}

    }

и после реализовывать:

var result = from c in dbContext.Cliente
             select new ClientePresenter{
                Id=c.Id
                Identificacion = c.Identificacion,
                clienteNombre =c.Nombre,
                contactoNombre = c.Contacto.Where(x=> x.Estado && x.IdTipoContacto == 1)
                                        .Select(x=> x.Nombres )
            };
0
ответ дан 24.11.2019, 13:30
  • 1
    @Kmiilo, если ты возвращаешь с linq объект типа клиент, в конце концов ты будешь иметь доступ ко всем признакам этого класса и он не отвечает на то, что ты спрашиваешь только иметь какие-то поля – Frank Núñez Rodríguez 05.09.2016, 18:32
  • 2
    если я понимаю, но то, что он перемещает, что обязательный разум tendr и # 237; которому клиент возвращать объект типа, так как despu и # 233; s я это mapeando в другой класс, и только для консультации я нуждаюсь в этом, костлявая, в котором нуждаться, и # 237; в в этом случае setiar данные об этой консультации в мою как таковую организацию, чтобы мочь возвращать это, но я не нахожу формы, что как ты говоришь, что я буду иметь доступ ко всему, но в этом случае он отличался бы, потому что я только буду показывать какие-то данные, костлявая, что другие parametos были бы пустыми – Kmiilo Berrio Montoya 05.09.2016, 18:51
  • 3
    @Kmiilo, поскольку я понял, ты хочешь возвратить объект типа Клиент, если это так, помести в new Клиент в консультации и наполни одинокие данные, которых ты хочешь... – Frank Núñez Rodríguez 05.09.2016, 19:14
  • 4
    Если я это хочу, но у меня выходит excepci и # 243; n Прицел не может строить себе тип организации или комплекса в консультации linq to entities – Kmiilo Berrio Montoya 05.09.2016, 19:36
  • 5
    твоя организация у клиента строитель есть?? – Frank Núñez Rodríguez 05.09.2016, 22:01

Теги

Похожие вопросы