Usuário com melhor resposta
Ajuda com LINQ

Pergunta
-
Olá,
Eu tenho uma List de uma struct que é composta por um datetime e um double.
List<struct>.
Eu quero gerar uma nova lista que é o resultado dos seguintes filtros:
Objetos com horário maiores que 11:30 nos objetos que a data for menor que 15/mar
Objetos com horário maiores que 10:30 nos objetos que a data for maior que 15/mar
Como montar a expressão LINQ para selecionar essa lista?
- Movido AndreAlvesLimaModerator sexta-feira, 8 de abril de 2011 15:39 (De:C#)
Respostas
-
Olá Gustavo,
Segue uma possível solução.
[]s!
private struct MyStruct { public DateTime date; public Double value; } static void Main(string[] args) { List<MyStruct> list = new List<MyStruct>(); list.Add(new MyStruct() { date = new DateTime(2011, 03, 15, 11, 31, 00), value = 10 }); // Não deve listar list.Add(new MyStruct() { date = new DateTime(2011, 03, 15, 11, 30, 00), value = 10 }); // Não deve listar list.Add(new MyStruct() { date = new DateTime(2011, 03, 14, 11, 31, 00), value = 10 }); // Deve listar list.Add(new MyStruct() { date = new DateTime(2011, 03, 14, 11, 29, 00), value = 10 }); // Não deve listar list.Add(new MyStruct() { date = new DateTime(2011, 03, 15, 10, 31, 00), value = 10 }); // Não deve listar list.Add(new MyStruct() { date = new DateTime(2011, 03, 15, 10, 30, 00), value = 10 }); // Não deve listar list.Add(new MyStruct() { date = new DateTime(2011, 03, 16, 10, 31, 00), value = 10 }); // Deve listar list.Add(new MyStruct() { date = new DateTime(2011, 03, 16, 10, 29, 00), value = 10 }); // Não deve listar DateTime limit1 = new DateTime(2011, 03, 15, 11, 30, 00); DateTime limit2 = new DateTime(2011, 03, 15, 10, 30, 00); var query = list.Where(s => (s.date.TimeOfDay > limit1.TimeOfDay && s.date.DayOfYear < limit1.DayOfYear) || (s.date.TimeOfDay > limit2.TimeOfDay && s.date.DayOfYear > limit2.DayOfYear)); }
Fernando Henrique Inocêncio Borba Ferreira- Marcado como Resposta Gustavo Binnie quarta-feira, 21 de setembro de 2011 18:55
Todas as Respostas
-
Prezado(a),
Estou migrando seu post para o fórum de LINQ.
Por favor, das próximas vezes que tiver alguma dúvida relacionada a esse assunto, poste por lá.
Obrigado pelo apoio.
André Alves de Lima
Microsoft MVP - Client App Dev
Visite o meu site: http://www.andrealveslima.com.br
Me siga no Twitter: @andrealveslima -
-
Boa tarde,
var obj = from p in source
where (p.horario > horarioFiltro && p.data < dataFiltro) || (p.horario > horarioFiltro && p.data < dataFiltro)
select p;
Não testei o código mas seria tipo isso pelo que eu entendi em sua pergunta
Att.
Se a resposta for útil marque-a como resposta
-
Olá Gustavo,
Segue uma possível solução.
[]s!
private struct MyStruct { public DateTime date; public Double value; } static void Main(string[] args) { List<MyStruct> list = new List<MyStruct>(); list.Add(new MyStruct() { date = new DateTime(2011, 03, 15, 11, 31, 00), value = 10 }); // Não deve listar list.Add(new MyStruct() { date = new DateTime(2011, 03, 15, 11, 30, 00), value = 10 }); // Não deve listar list.Add(new MyStruct() { date = new DateTime(2011, 03, 14, 11, 31, 00), value = 10 }); // Deve listar list.Add(new MyStruct() { date = new DateTime(2011, 03, 14, 11, 29, 00), value = 10 }); // Não deve listar list.Add(new MyStruct() { date = new DateTime(2011, 03, 15, 10, 31, 00), value = 10 }); // Não deve listar list.Add(new MyStruct() { date = new DateTime(2011, 03, 15, 10, 30, 00), value = 10 }); // Não deve listar list.Add(new MyStruct() { date = new DateTime(2011, 03, 16, 10, 31, 00), value = 10 }); // Deve listar list.Add(new MyStruct() { date = new DateTime(2011, 03, 16, 10, 29, 00), value = 10 }); // Não deve listar DateTime limit1 = new DateTime(2011, 03, 15, 11, 30, 00); DateTime limit2 = new DateTime(2011, 03, 15, 10, 30, 00); var query = list.Where(s => (s.date.TimeOfDay > limit1.TimeOfDay && s.date.DayOfYear < limit1.DayOfYear) || (s.date.TimeOfDay > limit2.TimeOfDay && s.date.DayOfYear > limit2.DayOfYear)); }
Fernando Henrique Inocêncio Borba Ferreira- Marcado como Resposta Gustavo Binnie quarta-feira, 21 de setembro de 2011 18:55