только что решил это, добавив ngfModule к импорту дочернего модуля. Отличный пример для использования, так что наслаждайтесь этим.
from i in Db.Items
select new VotedItem
{
ItemId = i.ItemId,
Points = (from v in Db.Votes
where b.ItemId == v.ItemId
select v.Points ?? 0).Sum()
}
РЕДАКТИРОВАНИЕ - хорошо что относительно этого... (Стреляющий снова, так как я не знаю Вашу модель...):
from i in Db.Items
select new VotedItem
{
ItemId = i.ItemId,
Points = (from v in Db.Votes
where b.ItemId == v.ItemId)
.Sum(v => v.Points)
}
Может быть должен поместить этот запрос в попытку/выгоду.. если "исключение", то не было никаких найденных голосов
(from i in Db.Items
where (from v in Db.Votes
where i.ItemId == v.ItemId
select v.Points).Count() > 0
select new VotedItem
{
ItemId = i.ItemId,
Points = (from v in Db.Items
where i.ItemId == v.ItemId
select v.Points).Sum()
}).Union(from i in Db.Items
where (from v in Db.Votes
where i.ItemId == v.ItemId
select v.Points).Count() == 0
select new VotedItem
{
ItemId = i.ItemId,
Points = 0
}).OrderBy(i => i.Points);
Это работает, но не очень симпатично или читаемо.
Простое, но эффективное обходное решение должно было бы только суммировать голоса где Точки. Количество> 0, таким образом, у Вас никогда нет нулевых значений:
from i in Db.Items
select new VotedItem
{
ItemId = i.ItemId,
Points = (from v in Db.Votes
where b.ItemId == v.ItemId &&
v.Points.Count > 0
select v.Points).Sum()
}
Вы хотите использовать форму Sum, допускающую значение NULL, поэтому попробуйте преобразовать свое значение в значение, допускающее значение NULL:
from i in Db.Items
select new VotedItem
{
ItemId = i.ItemId,
Points = (from v in Db.Votes
where b.ItemId == v.ItemId
select v.Points).Sum(r => (decimal?) r.Points)
}
Ваша проблема обсуждается здесь более подробно: