2017-01-24 32 views
1

以下のLinq問合せで、私はうまく動作しません。私の問題は、null参照または結果が得られないということです(私が持っているforループに "if"ステートメントを置いておくと)。このクエリは、event_numberで上位20回の結果を提供することになっています。Linq問合せのNull例外または結果がありません。

var queryByEventNumber = EventNumbers 
.GroupJoin(EntryEvents, e => e.Id, ee => ee.EventNumberId, (e, g) => new 
{ 
    EventNumber = e, 
    EntryEvents = g 
}) 
.OrderBy(e => e.EventNumber.Event_Number); 

foreach (var group in queryByEventNumber) 
{ 
    Console.WriteLine($"EventNumber: { group.EventNumber.Event_Number}"); 

//If statement apparently always returns false at this point 
//If I remove if statement, I get a null reference on group.EntryEvents.OrderBy(r => r.Result.AdjustTime)... 

    if(Results.Any(r => r.EntryEvents.Any(g => g.EventNumberId == group.EventNumber.Id))) 
    { 
     foreach (var result in group.EntryEvents.OrderBy(r => r.Result.AdjustedTime).Take(20)) 
     { 
      Console.WriteLine($"\t\t{result.Result.AdjustedTime} : {result.Result.DateCreated.Year}"); 
     } 
    } 
} 

問題は、すべてのイベント番号に対して結果がないことです(最終的に私はどちらかの方法で対応できる必要があると思います)。私はifステートメントにいくつかのバリエーションを試しましたが、運はありません。どんな助けもありがとうございます。ありがとう!

+0

ことが最適であるが、それは動作します、あなたは 'の場合(Results.Any(R => r.EntryEvents.Any'に'場合(Results.Any(R => Rを変更してみてください.EntryEvents.Where' – Yahya

+0

しようとしましたが、IEnumerable をboolに変換できません。 – Wyatt

+0

「EventNumbers」および「EntryEvents」変数のタイプはどれですか? –

答えて

0

私はこの試行錯誤の後、この解決策を検討しました。わからない...

var eventNumbers = EventNumbers.Where(e => e.Active).OrderBy(e => e.Event_Number).ToList(); 

foreach (var en in EventNumbers) 
{ 
    Console.WriteLine($"EventNumber: {en.Event_Number}"); 

    var results = Results 
    .Where(r => r.EntryEvent.EventNumberId == en.Id && !r.Disqualified && r.Active && !r.EntryEvent.Scratched) 
    .OrderBy(r => r.AdjustedTime) 
    .Take(20); 
    if (results != null) 
    { 
     foreach (var result in results) 
     { 
      Console.WriteLine($"Time: {result.AdjustedTime}"); 
     } 
    } 
} 
関連する問題