DUVIDAS COM LIST HELP :P
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...
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...
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...
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...
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[ô] [Ô]
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[ô] [Ô]
Mais ou menos assim:
List<Lote> filtrado = LoteList.Where(x => x.Codigo >45 & x.Codigo<=59).ToList(); //ToList, só pra garantir ;)
List<Lote> filtrado = LoteList.Where(x => x.Codigo >45 & x.Codigo<=59).ToList(); //ToList, só pra garantir ;)
é 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 :)
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;
}
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