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!
Для этого ты будешь должен реализовывать более конкретный 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 )
};
Реализовывая консультацию с 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....
Для которого ты желаешь 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 )
};