DUVIDAS COM LIST HELP :P

NALDOXD 28/05/2012 12:01:15
#402960
Bom dia pessoal, a minha dúvida é o seguinte eu tenho uma lista: public List<Lote> LoteList { get; private set; } com a seguinte estrutura:

public Lote()
{
this.Codigo = 0;
this.CodigoClassificacao = 0;
this.CodigoCultivar = 0;
this.CodigoGrupoTratamento = null;
this.CodigoPeneira = String.Empty;
this.CodigoSafra = 0;
this.CodigoTipoVolume = 0;
this.Numero = String.Empty;
this.Origem = String.Empty;
this.QuantidadePeso = 0.0;
this.IsPuro = false;
this.IsGOAprovado = null;
this.GraosVerdes = null;
this.Estoque = null;
this.IPA = null;
this.CodigoPureza = null;
this.CodigoGerminacaoPadrao = null;
this.IsCalcularAvaliacaoLote = false;
this.PesoAmostraNocivaBAS = null;
this.DataAnaliseGP = null;
this.IsEspecialSemEstoque = false;
this.Tipo = 1;
this.IsTerceiro = false;
this.IsReembalado = false;
this.Terceiro = String.Empty;
this.Observacao = String.Empty;
}

Vamos supor que essa lista LoteList tenha 100 registros de 1 á 100 e o meu cliente seleciona a lote inicial 20 e o lote final 35 e eu queira pegar os itervalos desses lotes ficando assim 20, 21, 22, 23, 24, ..., 33, 34, 35 como eu conseguiria?? Lembrando que o código do lote é código mesmo como está na minha estrutura...

KERPLUNK 28/05/2012 12:14:35
#402961
Resposta escolhida
1 - Esse construtor, me parece meio deslocado, à menos que esses sejam os valores [Ô]default[Ô] de cada uma das propriedades.
2 - Para fazer essa lista, crie uma outra classe sugiro que chame [Ô]LoteDAO[Ô]. Nela crie um método que o retorno seja uma lista de lotes, mais ou menos assim:
public List<Lote> BuscaLotes(int Inicial, int Final)
{
List<Lote> _return = null;
using (SqlConnection cn = new SqlConnection([Ô]Sua string de conexão aqui[Ô])
{
cn.Open;
using (SqlCommand cmd = new SqlCommand([Ô]select * from Lotes Where Codigo >= @Inicial and Codigo <= @Final[Ô], cn)
{
cmd.Parameters.AddWithValue([Ô]@Inicial[Ô], inicial);
cmd.Parameters.AddWithValue([Ô]@Final[Ô], Final);
using (SqlDataReader dr = cmd.ExecuteReader())
{
if (dr.HasRows())
_return = new List<Lote>();
while (dr.Read())
{
Lote lot = new Lote();
lot.Codigo = dr.GetInt32(dr.GetOrdinal([Ô]Codigo[Ô]));
lot.CodigoClassificacao = dr.GetInt32(dr.GetOrdinal([Ô]Classificacao[Ô]));
///assim por diante até todos os campos

_return.Add(lot)
}
}
}
return _return;
}


Como eu tenho quase certeza que você vai simplesmente copiar e colar o código, sem se preocupar em entender o que ele faz, poste suas dúvidas ae...
NALDOXD 28/05/2012 12:19:48
#402963
Sim esse metodo é os valores default, você fez um select no banco neste caso.. como minha lista (LoteList ) já está em memória com todos os lotes que eu vou precisar eu gostaria de saber se tem como eu pesquisar dentro dela mesmo com uma expressão lambda ou linq que eu possa pegar esses codigo e inserir em uma outra lista List<int> lotes = new List<int>();

Enfim,
Eu quero apenas o codigo dos lotes, que já estão dentro da lista LoteList tem como eu pegar com alguma expressão?


mas desde já eu agradeço Kerp!! (y)



O que tenho em idéia é mais ou menos isso Kerp:

foreach (int number in Lasa.Production.BLL.LoteCollection.Instance.LoteList)
{
if (number >= 20) AND (number <= 35)
{
lotes.add(number);
}
}

só que da erro na chamada Lasa.Production.BLL.LoteCollection.Instance.LoteList ele acusa que [Ô]Cannot convert type [ô] Lasa.Production.BLL.Lote[ô] to [ô]int[ô] [Ô]
KERPLUNK 28/05/2012 12:22:32
#402964
Mais ou menos assim:
List<Lote> filtrado = LoteList.Where(x => x.Codigo >45 & x.Codigo<=59).ToList(); //ToList, só pra garantir ;)
NALDOXD 28/05/2012 12:31:55
#402965
é mais ou menos isso ai mesmo Kerp está dando um erro de sintax mas vou tentar resolver e assim que funfar eu fecho o tópico, obg!! Caso mais alguém tenha uma sugestão ficaria grato :)
NALDOXD 27/06/2012 11:20:12
#404992
Obrigado KERP apartir do seu código eu tive a luz pra fazer isso:

try
{
if (LoteList == null)
return null;

var query = from lote in LoteList
where (String.Compare(lote.Numero, codigoinicial, true) >= 0) && (String.Compare(lote.Numero, codigofinal, true) <= 0)
select lote;


if (query.Count() == 0)
return null;

return query.ToList();
}
catch
{
throw;
}
Tópico encerrado , respostas não são mais permitidas