Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Antonio Montana

LinQ e ListBox

Recommended Posts

Hola Amigos!

 

Quem é mestre em LinQ?

 

To com um problema. Tenho uma Máscara de Busca com TextBoxes E LisBoxes!

 

Essa é minha busca no LinQ, porém SEM os ListBoxes:

 

           var offers = offer.GetList().Where(
               item =>
                   (item.Name.ToLowerInvariant().Contains(this.txtName.Text.ToLowerInvariant()) ||
                   String.IsNullOrEmpty(this.txtName.Text.ToLowerInvariant())) &&

                   (item.Number.ToLowerInvariant() == this.txtNumber.Text.ToLowerInvariant() ||
                   String.IsNullOrEmpty(this.txtNumber.Text.ToLowerInvariant())) &&

                   (item.PONumber.ToLowerInvariant() == this.txtPONumber.Text.ToLowerInvariant() ||
                   String.IsNullOrEmpty(this.txtPONumber.Text.ToLowerInvariant())) &&

                   (item.ProjectNumber.ToLowerInvariant() == this.txtProjectNumber.Text.ToLowerInvariant() ||
                   String.IsNullOrEmpty(this.txtProjectNumber.Text.ToLowerInvariant())) &&

                   (this.ddlCustomer.SelectedIndex != 0 ?
                   item.Customer.CustomerID == Convert.ToInt32(this.ddlCustomer.SelectedValue) :
                   item.Customer.CustomerID == item.Customer.CustomerID)
           ).ToList<Offer>();

 

Agora preciso implementar a selecao do ListBox no meio dessa busca, considerando que mais de uma opcao pode ser selecionada.

 

Pensei em algo mais ou menos assim:

 

           //Aqui crio uma lista de Items selecionados no ListBox
           var userContacts = from userContact in this.lstUserContact.Items.Cast<ListItem>()
                              where userContact.Selected == true
                              select userContact;

           var offers = offer.GetList().Where(
               item =>
                   (item.Name.ToLowerInvariant().Contains(this.txtName.Text.ToLowerInvariant()) ||
                   String.IsNullOrEmpty(this.txtName.Text.ToLowerInvariant())) &&

                   (item.Number.ToLowerInvariant() == this.txtNumber.Text.ToLowerInvariant() ||
                   String.IsNullOrEmpty(this.txtNumber.Text.ToLowerInvariant())) &&

                   (item.PONumber.ToLowerInvariant() == this.txtPONumber.Text.ToLowerInvariant() ||
                   String.IsNullOrEmpty(this.txtPONumber.Text.ToLowerInvariant())) &&

                   (item.ProjectNumber.ToLowerInvariant() == this.txtProjectNumber.Text.ToLowerInvariant() ||
                   String.IsNullOrEmpty(this.txtProjectNumber.Text.ToLowerInvariant())) &&

                   //Aqui seria minha busca, usando a Lista criada la em cima, porém da erro de compilacao!
                   item.UserContacts.Where(userContactItem => 
                   {
                       userContacts.Where(userContactListItem => userContactItem.UserID.ToString() == userContactListItem.Value);
                   })

                   (this.ddlCustomer.SelectedIndex != 0 ?
                   item.Customer.CustomerID == Convert.ToInt32(this.ddlCustomer.SelectedValue) :
                   item.Customer.CustomerID == item.Customer.CustomerID)
           ).ToList<Offer>();

 

Como adicionar uma busca de ListBox dentro do meu LinQ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Em item.UserContacts o UserContacts é uma Entidade ou uma propriedade?

Eu não tendi o cenário!

 

Oi Ivan! O item esta se referindo a uma classe chamada Offer e nessa classe tenho a propriedade UserContacts

 

//Aqui seria minha busca, usando a Lista criada la em cima, porém da erro de compilacao!

item.UserContacts.Where(userContactItem =>

{

userContacts.Where(userContactListItem => userContactItem.UserID.ToString() == userContactListItem.Value);

})

 

Em azul a propriedade e em verde o item do ListBox!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então antonio, eu estou entendendo mas preciso saber quais os tipos de objetos:

Veja um exemplo:


//primeiro preencho userIds com uma lista de UserID

var userIds = from userContact in this.lstUserContact.Items.Cast<ListItem>()
                              where userContact.Selected == true
                              select userContact.UserID;

 

 

e com essa lista de UserID eu consigo filtrar a outra da seguinte forma, digamos que na minha outra lista tenha uma propriedade UserID relacionada.

então:

 

 

var offers = offer.GetList().Where(
               item =>
                   (item.Name.ToLowerInvariant().Contains(this.txtName.Text.ToLowerInvariant()) ||
                   String.IsNullOrEmpty(this.txtName.Text.ToLowerInvariant())) &&

                   (item.Number.ToLowerInvariant() == this.txtNumber.Text.ToLowerInvariant() ||
                   String.IsNullOrEmpty(this.txtNumber.Text.ToLowerInvariant())) &&

                   (item.PONumber.ToLowerInvariant() == this.txtPONumber.Text.ToLowerInvariant() ||
                   String.IsNullOrEmpty(this.txtPONumber.Text.ToLowerInvariant())) &&

                   (item.ProjectNumber.ToLowerInvariant() == this.txtProjectNumber.Text.ToLowerInvariant() ||
                   String.IsNullOrEmpty(this.txtProjectNumber.Text.ToLowerInvariant())) &&

                   //Aqui
	   userIds.Contains(item.UserID));

                   (this.ddlCustomer.SelectedIndex != 0 ?
                   item.Customer.CustomerID == Convert.ToInt32(this.ddlCustomer.SelectedValue) :
                   item.Customer.CustomerID == item.Customer.CustomerID)
           ).ToList<Offer>();

 

 

Deu pra entender?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Hola Amigo!

 

Entonces, é mais ou menos por ai...você entendeu mesmo o negócio!

 

userIds.Contains(item.UserIDs));

 

Lembrando que minha propriedade item.UserIDs também é uma lista, ou seja, nao é possivel usar Contais neste caso se eu nao me engano! Teria que comparar ID por ID através de um Loop, acontece que nao sei como usar um Loop assim dentro desta expressao LinQ!!! Talvez haja uma forma mais facil de resolver e eu eh que estou vacilando. Este é meu primeiro projeto com 100% LinQ e por isso to comecando a dar de cabeca com essas coisas que fora do LinQ ja teria resolvido em 1 minuto!

 

Gracias amigo!

 

Então antonio, eu estou entendendo mas preciso saber quais os tipos de objetos:

Veja um exemplo:


//primeiro preencho userIds com uma lista de UserID

var userIds = from userContact in this.lstUserContact.Items.Cast<ListItem>()
                              where userContact.Selected == true
                              select userContact.UserID;

 

 

e com essa lista de UserID eu consigo filtrar a outra da seguinte forma, digamos que na minha outra lista tenha uma propriedade UserID relacionada.

então:

 

 

var offers = offer.GetList().Where(
               item =>
                   (item.Name.ToLowerInvariant().Contains(this.txtName.Text.ToLowerInvariant()) ||
                   String.IsNullOrEmpty(this.txtName.Text.ToLowerInvariant())) &&

                   (item.Number.ToLowerInvariant() == this.txtNumber.Text.ToLowerInvariant() ||
                   String.IsNullOrEmpty(this.txtNumber.Text.ToLowerInvariant())) &&

                   (item.PONumber.ToLowerInvariant() == this.txtPONumber.Text.ToLowerInvariant() ||
                   String.IsNullOrEmpty(this.txtPONumber.Text.ToLowerInvariant())) &&

                   (item.ProjectNumber.ToLowerInvariant() == this.txtProjectNumber.Text.ToLowerInvariant() ||
                   String.IsNullOrEmpty(this.txtProjectNumber.Text.ToLowerInvariant())) &&

                   //Aqui
	   userIds.Contains(item.UserID));

                   (this.ddlCustomer.SelectedIndex != 0 ?
                   item.Customer.CustomerID == Convert.ToInt32(this.ddlCustomer.SelectedValue) :
                   item.Customer.CustomerID == item.Customer.CustomerID)
           ).ToList<Offer>();

 

 

Deu pra entender?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tenta assim então:

 

var userIds = from userContact in this.lstUserContact.Items.Cast<ListItem>()
                  			where userContact.Selected == true
                  			select userContact.UserID;


item.UserContacts.Where(userContactItem => 
                   {
		userIds.Contains(userContactItem.UserID);
                   })

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.