2016-03-02 2 views
0

Я пытаюсь выбрать диапазон дат из Fouten.Datum, но он должен содержать даты от всех Rapporten и только для одного конкретного NameTreinLINQ запрос для выбора даты в таблице

My SQL diagram

DateTime dateStart = CalenderSearch.SelectedDates.First(); 
DateTime dateEnd = CalenderSearch.SelectedDates.Last(); 

ObjectQuery<Fouten> fouten = eventsEntities.Foutens; 
var query = 
(from fout in fouten 
where dateStart <= fout.Datum && dateEnd >= 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, 
    FoutId = fout.FoutId 

}).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 
}).ToList(); 

      foutensDataGrid.ItemsSource = query; 

Это возвращает все даты, игнорируя внешний ключ, поэтому я предполагаю, что мне нужно выбрать внутри выбранного в пределах выбора.

Например мне нужно:

все даты для NameTrein = '1301' в [Treinen] внутри все * [Rapporten] из [Fouten]

, но как я соучастника это?

ответ

1

Вы можете добавить это условие к существующему где п:

var query = fouten 
    .Where(fout => fout.dateStart <= fout.Datum && fout.dateEnd >= fout.Datum 
    && fout.Rapporten.Treinen.NameTrein == "1301") 
    .OrderBy(fout => fout.Datum) 
    .ThenBy(fout => fout.Time); 
+0

Так просто .. спасибо –

+0

Добро пожаловать. Не стесняйтесь отмечать свой вопрос как ответ, если это то, что вам нужно. Конечно, вы также можете использовать длинный синтаксис, предлагаемый @mortb. – Marc

0

Вы можете сделать это путем присоединения к таблице Rapporten. Попробуйте следующее:

from fout in fouten 
join rapport in eventsEntities.Rapporten on rapport.RaportId equals fout.RaportId into fout_rapport 
where dateStart <= fout.Datum && dateEnd >= fout.Datum && rapport.NameTrein='1301' 
orderby fout.Datum, fout.Time