Почему запрос к БД EF не верно работает?

В данном коде, создаю новый лист типа стринг, подсчитываю количество голов матча у хозяев и гостей, но по какой-то не неведанной мне причине суммы голов всегда равны...
var calendar = _context.Matchs.Where(i => i.ChampionatId == id).Select(x => new List<string> {
                 x.Name,
                _context.StatisticPlayers.Where(i => i.MatchId == x.Id && i.CommandId == x.HomeId).Sum(n=>n.Goal).ToString(),
                _context.StatisticPlayers.Where(i => i.MatchId == x.Id && i.CommandId == x.GuestId).Sum(p=>p.Goal).ToString()
});


Если этот код я не много переделаю, то всё отлично работает,
var calendar = _context.Matchs.Where(i => i.ChampionatId == id).Select(x => new List<string> {
                 x.Name,
                _context.StatisticPlayers.Where(i => i.MatchId == x.Id && i.CommandId.ToString().Contains(x.HomeId.ToString())).Sum(n=>n.Goal).ToString(),
                _context.StatisticPlayers.Where(i => i.MatchId == x.Id && i.CommandId.ToString().Contains(x.GuestId.ToString())).Sum(p=>p.Goal).ToString()
});

Это глюк EF, или это мой глюк?
  • Вопрос задан
  • 220 просмотров
Пригласить эксперта
Ответы на вопрос 2
@dmitryKovalskiy
программист средней руки
Вот вам маленькая загадка : если по каким-то причинам этот код выдаст исключение - вы будете знать в каком место оно возникло?
Последовательность LINQ-команд это конечно замечательно, но на мой взгляд этот код совершенно не читаем и с ходу понять что в нем не так на мой взгляд очень и очень трудно.
Если искать проблемы, то видимо у вас они кроятся в элементе "i.CommandId == x.HomeId" и "i.CommandId == x.GuestId". Какого типа эти поля? Что в них хранится и в каком виде?

UPD: Вы можете объяснить что у вас в конечном счете должно храниться внутри List< string > ? Что вы хотите сформировать ?
Ответ написан
Комментировать
VigVam
@VigVam Автор вопроса
CommandId (int) - ид команды, в таблице "Статистика игроков", от сюда я вытаскиваю забитые голы игроками, которые должны быть в составе этой команды;
HomeId и GuestId (оба int) - ид команды, в таблице "Матчи" хозяева или гости соответственно.
Надеюсь более-менее внятно описал...

Даже больше, пробуем так - всё отлично:
var summ = _context.StatisticPlayers.Where(i => i.MatchId == 143 && i.CommandId == 9).Sum(n=>n.Goal).ToString();
var summ1 = _context.StatisticPlayers.Where(i => i.MatchId == 143 && i.CommandId == 1).Sum(n => n.Goal).ToString();

Так, плохо:
var calendar = _context.Matchs.Where(i => i.ChampionatId == id).Select(f => new List<string> {
                _context.StatisticPlayers.Where(i => i.MatchId == 143 && i.CommandId == 9).Sum(n=>n.Goal).ToString(),
                _context.StatisticPlayers.Where(i => i.MatchId == 143 && i.CommandId == 1).Sum(n => n.Goal).ToString()
            });
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы