简体   繁体   English

Linq查询空例外或无结果

[英]Linq Query Either Null Exception or No Results

I'm working on the below Linq query that I can't quite get to work. 我正在研究下面的Linq查询,我无法开始工作。 My issue is that I get a null reference or no results (if I keep the "if" statement in the for loop I have). 我的问题是我得到一个空引用或没有结果(如果我在for循环中保留“if”语句)。 The query is supposed to provide the top 20 result times by event_number. 该查询应该通过event_number提供前20个结果时间。

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}");
        }
    }
}

The issue is that I don't have results for every eventnumber (eventually I will but I believe I need to be able to handle it either way). 问题是我没有每个eventnumber的结果(最终我会,但我相信我需要能够以任何方式处理它)。 I've tried a few variations to the if statement but no luck. 我已经尝试了if语句的一些变化,但没有运气。 Any help is appreciated. 任何帮助表示赞赏。 Thanks! 谢谢!

Ok, so after a bunch of trial and error, I went with this solution. 好的,经过一系列的反复试验后,我选择了这个解决方案。 Not sure it is optimal, but it works... 不确定它是最佳的,但它的工作原理......

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}");
        }
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM