2016-03-07 2 views
0

Я пытаюсь сделать динамический запрос для извлечения данных из базы данных sql. Но как мне выполнить предложение dynamic where для каждого элемента внутри списка?C# LINQ to SQL dynamic where where

, например:

where datumStart <= fout.Datum && datumEnd >= fout.Datum && foreach (var item in listbox.SelectedItems) 
{ 
    Treinen treinData = (Treinen)item; 
    where fout.Treinen.Name == treinData.Name 
} 

Так что добавляет все элементы внутри Еогеасп как где п & &.

Вся помощь приветствуется!

Исходный код:

  foreach (var items in _listBox.SelectedItems) 
      { 
       Treinen treinData = (Treinen)items; 
       Console.WriteLine(treinData.Name); 
      } 
      DateTime datumStart = datePickerStart.SelectedDate.Value; 
      DateTime datumEnd = datePickerEnd.SelectedDate.Value; 

      ObjectQuery<Fouten> fouten = eventsEntities.Foutens; 
      loadedData = 
      (from fout in fouten 
      where datumStart <= fout.Datum && datumEnd >= fout.Datum 
      ..... 
      orderby fout.Datum, fout.Time 

      select new 
      { 
       Datum = fout.Datum, 
       Time = fout.Time, 
       FoutCode = fout.FoutCode, 
       Omschrijving = fout.Omschrijving, 
       Teller = fout.Teller, 
       Module = fout.Module.ToUpper(), 
       FoutId = fout.FoutId, 
       TreinId = fout.TreinId 

      }).AsEnumerable().Select(x => new Fouten 
      { 
       Datum = x.Datum, 
       Time = x.Time, 
       FoutCode = x.FoutCode, 
       Omschrijving = x.Omschrijving, 
       Teller = x.Teller, 
       Module = x.Module, 
       FoutId = x.FoutId, 
       TreinId = x.TreinId 
      }).ToList(); 
      foutensDataGrid.ItemsSource = loadedData; 
+0

Если соответствующий связей в предложении where вам нужно будет использовать деревья выражений, иначе вы можете использовать выражение, если вы просто изменяете значения в предложении where, такие как x.Name = «Bob» или x.Name = «Goostrabha» и передайте выражение в предикат. –

+0

вы также можете добавить несколько предложений «где» в ваш запрос, каждый из которых означает «&&». так, например, «var query = select x where cluase1 where clause2» – esiprogrammer

+0

Что именно должно оценивать это * динамическое предложение where * –

ответ

0

Вы можете цепи вызовы метода .Where() расширения (и многие другие методы расширения LINQ). Так начать с вашей коллекции (и ваш первоначальный .Where() пункта):

var foutens = eventsEntities.Foutens 
       .Where(f => datumStart <= f.Datum && datumEnd >= f.Datum); 

, а затем добавить .Where() пункты по мере необходимости:

foreach (var item in listbox.SelectedItems) 
{ 
    Treinen treinData = (Treinen)item; 
    foutens = foutens.Where(f => f.Treinen.Name == treinData.Name); 
} 

Затем вы можете продолжать добавлять оставшиеся положения, ни один из которых на самом деле оценить основные данные, пока вы не получите что-то, на самом деле перечисляет его (например, .ToList() в вашем случае):

loadedData = foutens.Select(f => new 
{ 
    Datum = f.Datum, 
    Time = f.Time, 
    FoutCode = f.FoutCode, 
    Omschrijving = f.Omschrijving, 
    Teller = f.Teller, 
    Module = f.Module.ToUpper(), 
    FoutId = f.FoutId, 
    TreinId = f.TreinId 
}).AsEnumerable().Select(x => new Fouten 
{ 
    Datum = x.Datum, 
    Time = x.Time, 
    FoutCode = x.FoutCode, 
    Omschrijving = x.Omschrijving, 
    Teller = x.Teller, 
    Module = x.Module, 
    FoutId = x.FoutId, 
    TreinId = x.TreinId 
}).ToList();