Entity Framework: многие ко многим считают и суммируют - PullRequest
2 голосов
/ 16 мая 2009

Я использую Entity Framework. У меня есть много ко многим отношениям Статьи <-> Категории. Каждая статья может принадлежать нескольким категориям, и каждая категория может принадлежать более чем одной статье. Я могу получить КОЛИЧЕСТВО статей в каждой категории:

public IEnumerable<MenuCategory> GetMenuCategories()
{
   return (from c in db.CategorySet.Include("Articles")
     orderby c.CategoryName
     select new MenuCategory
     {
        CategoryID = c.CategoryID,
        CategoryName = c.CategoryName,
        CountOfCategory = c.Articles.Count()
      });

}

Но мне также нужно получить общее количество статей, чтобы я мог рассчитать, какой процент статей в каждой категории. Может кто-нибудь сказать мне, как это сделать, расширив код выше и не делая отдельный вызов в базу данных?

Спасибо

1 Ответ

0 голосов
/ 16 мая 2009

Код должен знать общее количество статей, чтобы сделать это.

Если вы хотите избежать второго вызова базы данных, вы можете выполнить вычисление в базе данных и вернуть его в качестве дополнительного столбца в наборе результатов. Есть разные способы добиться этого, но один из них состоит в том, чтобы использовать представление и иметь SQL-функцию TotalArticles, тогда ваш calc - это всего лишь articleCount / TotalArticles. Я не очень разбираюсь в структуре сущностей, поэтому я не уверен, что это выполнимо.

Если вы не можете выполнить калькуляцию в базе данных, то я думаю, что второй вызов базы данных неизбежен, хотя это всего лишь количество статей, поэтому вряд ли добавит много накладных расходов. Вы можете сделать этот вызов перед основным вызовом, а затем добавить значение к своим результатам аналогично тому, как описано выше, т.е. PercentageOfArticles = c.Articles.Count() / articleCount

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...