1

私はいくつかのSQLを持っており、LINQで同等のものを作成しようとしています。これはSQLです:

SELECT Categories.CategoryDescription, Categories.CategoryType AS Type, 
       Categories.Category, COUNT(CategoryLinks.OrgID) AS CountOfOrgs 
FROM CategoryLinks 
INNER JOIN Categories ON Categories.CategoryID = CategoryLinks.CategoryID 
GROUP BY Categories.Category, Categories.CategoryType, Categories.CategoryDescription 
ORDER BY CategoryDescription ASC

基本的に、Categoriesテーブルのすべてのリストと、それにリンクしているCategoryLinksテーブル内のOrgIdの数のカウントが必要です。

以下は私が現在実行しているクエリです。これを行うには、より効率的な方法が必要です。私が間違っている?

var cnts = (from c in db.Categories
  join cl in db.CategoryLinks on c.CategoryID equals cl.CategoryID
  group new { c, cl } by new
  {
    c.CategoryID
  } into g
  select new
  {
    CategoryID = g.Key.CategoryID,
    categoryCount = g.Count()
  });

  var results = (from c in db.Categories
    join cn in cnts on c.CategoryID equals cn.CategoryID
    select new
    {
      c.CategoryID,
      c.CategoryDescription,
      c.CategoryType,
      Category = c.Category1,
      cn.categoryCount
    });
4

2 に答える 2

2

GroupJoin メソッドを使用したいと思います。

Categories.GroupJoin(
    CategoryLinks, 
    x => x.CategoryID, 
    y => y.CategoryID, 
    (x,y) => new{
        x.CategoryID, 
        x.CategoryDescription, 
        x.CategoryType, 
        Category = x.Category1, 
        CategoryCount = y.Count() })

クエリ構文では、これは join..into のように記述されます。

from c in db.Categories
    join cl in db.CategoryLinks on c.CategoryID equals cl.CategoryID into catGroup
    select new
                   {
                       c.CategoryID,
                       c.CategoryDescription,
                       c.CategoryType,
                       Category = c.Category1,
                       CategoryCount = catGroup.Count()
                   }
于 2012-11-26T21:05:49.957 に答える
0

これを試して:

var bbb = categories.Join(categoryLinks, c => c.CategoryID, cl => cl.CategoryId, (c, cl) => new {c, cl})
                    .GroupBy(g => g.c)
                    .Select(g => new {count = g.Count(), Category = g.Key});

カウントとカテゴリ内のすべてのデータを返します。カテゴリ内のすべての列でグループ化し、結果を 2 つのプロパティを含む新しい匿名型変数に配置します。カウントを含むカウントと、カテゴリ タイプであり、カテゴリ行にあるすべてのデータを含むカテゴリです。必要に応じて、次のように書き換えることができます。

var bbb = categories.Join(categoryLinks, c => c.CategoryID, cl => cl.CategoryId, (c, cl) => new {c, cl})
                    .GroupBy(g => g.c)
                    .Select(g => new
                                 {
                                    CategoryID = g.Key.CategoryId,
                                    CategoryDescription = g.Key.CategoryDescription,
                                    CategoryType = g.Key.CategoryType,
                                    Category = g.Key.Category1,
                                    categoryCount = g.Count()
                                 });
于 2012-11-26T21:21:53.447 に答える