Другой общий случай, когда можно получить это исключение, включает в себя насмешливые классы во время модульного тестирования. Независимо от используемой насмешливой структуры, вы должны убедиться, что все соответствующие уровни иерархии классов должным образом высмеиваются. В частности, все свойства HttpContext
, на которые ссылается тестируемый код, должны быть изделены.
См. « Исключение NullReferenceException при проверке пользовательского AuthorizationAttribute » для несколько подробного примера.
Я думаю, вы хотите что-то вроде:
from forum in Forums
// ForumID part removed from both sides: LINQ should do that for you.
// Added "into postsInForum" to get a group join
join post in Posts on forum equals post.Forum into postsInForum
select new
{
Forum = forum,
// Select the number of shown posts within the forum
PostCount = postsInForum.Where(post => post.ShowIt == 1).Count()
}
Или (как указано в комментариях) вы можете поместить условие в вызов Count
- я всегда забываю, что доступно:)
from forum in Forums
// ForumID part removed from both sides: LINQ should do that for you.
// Added "into postsInForum" to get a group join
join post in Posts on forum equals post.Forum into postsInForum
select new
{
Forum = forum,
// Select the number of shown posts within the forum
PostCount = postsInForum.Count(post => post.ShowIt == 1)
}
Другой альтернативой фильтрации только «показанных» сообщений было бы сделать это в соединении:
from forum in Forums
join post in Posts.Where(post => post.ShowIt == 1)
on forum equals post.Forum into shownPostsInForum
select new
{
Forum = forum,
// Select the number of shown posts within the forum
PostCount = shownPostsInForum.Count()
}
Я считаю, что все они логически правильно, но я не знаю, как будет выглядеть SQL ...
Если вы подключаете Форумы к сообщениям в конструкторе linqtosql, это создаст свойство отношений, которое может быть запрошено.
var query =
from f in db.Forums
select new
{
forum = f,
PostCount = f.Posts.Count(p => p.ShowIt == 1)
};
PostCount = g.Count(post => post.ShowIt == 1)
? Или это только для LinqToObject? – ANeves 4 May 2010 в 17:44