У меня есть следующий код, который компилируется, но не возвращает правильные результаты.
Я пытаюсь получить все записи журнала Banned для людей, которые были зарегистрированы в мошенничестве на игровом сервере.
База данных (в данном случае две таблицы IList) содержит две простые таблицы .
- GameFiles: игра, в которой есть лог-файл .. который мы анализируем.
- LogEntries: отдельная запись в файле журнала. Каждый игровой файл имеет загрузку записей журнала.
Так что это простые отношения 1 ко многим.
В настоящее время он получает все результаты для GameType.BattleField2, но не для GameType.CallOfDuty4. Я подтвердил, что игровые файлы IList содержат некоторые данные для GameType.BattleField2 и GameType.CallOfDuty4. Я также подтвердил, что в каждом из этих файлов есть записи в журнале.
Так, может кто-нибудь взглянуть на этот linq и сказать мне, что я сделал не так?
public IList<LogEntry> BannedEntries(GameType? gameType)
{
var query = from l in _logEntryRepository.GetLogEntries()
join g in _gamefileRepository.GetGameFiles()
on l.GameFileId equals g.GameFileId into JoinedResult
from x in JoinedResult.DefaultIfEmpty()
select new
{
LogEntry = l,
GameFile = x
};
if (gameType.HasValue)
{
query = from q in query
where q.GameFile.GameType == gameType
select q;
}
// Now retrieve only LogEntries.
return (from q in query
where q.LogEntry.EventType == EventType.BannableViolation
select q.LogEntry)
.ToListIfNotNullOrEmpty();
}