none
Ajuda com LINQ RRS feed

  • 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?

    sexta-feira, 8 de abril de 2011 14:34

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
    sábado, 16 de julho de 2011 14:42
    Moderador

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
    sexta-feira, 8 de abril de 2011 15:39
    Moderador
  • Veja

    http://social.msdn.microsoft.com/Forums/en/adodotnetentityframework/thread/e2bf125c-ecab-4c3b-9144-6dcddee7ebe2


    Não esqueça de usar o componente </> na barra para posta seu código.
    quarta-feira, 13 de abril de 2011 17:58
  • 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


    sexta-feira, 15 de julho de 2011 20:32
  • 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
    sábado, 16 de julho de 2011 14:42
    Moderador