1

私はlinqを初めて使用するので、特定の参加が必要です。したがって、Linqと結合したい特定のページ用に2つのテーブルがあります。

UserFavoritesテーブル:

Page.id
userClickCount

ページテーブル:

id
everyoneClickCount

ユーザーのお気に入りは、クリックまたはお気に入りにされたときに作成されるため、リンクの数は一定です。両方のテーブルのすべての結果を表示し、ユーザーが最もクリックしたもの、次にすべてのユーザーが最もクリックしたもので並べ替えます。

私は今これを持っていますが、それはみんなの数でソートします。

pages = (from page in context.Page
              join ps in
          (from favs in context.UserFavorites
              select favs) on page.Id equals ps.Page.Id into temp
          from t in temp.DefaultIfEmpty()
              orderby t.userClickCount descending, t.Page.everyoneClickCount  descending, t.Page.PageName ascending
            select dash).ToList();

ここからどこへ行けばいいのかわからない。

4

2 に答える 2

0

これを試して:

var pages = context.Pages.Select(page => new { 
                                               PageData = page, 
                                               Favs = page.UserFavorites 
                                             })
                         .OrderByDescending(page => (page.Fav.Sum(userClickCount))
                         .ThenBy(page => page.PageData.everyoneClickCount)
                         .ThenBy(page => page.PageData.Name)
                         .ToList();

これは、すべてのユーザーのクリック数の合計で並べ替えられることに注意してください。現在のユーザーだけが必要な場合は、その行を次のように置き換えます.OrderByDescending(page => (page.Fav.Where(u => u.userID == userid).Sum(userClickCount))

于 2013-02-15T16:26:55.790 に答える
-3

複雑な結合の場合は、ストアド プロシージャを作成し、EF と linq を使用してこの SP を呼び出すことをお勧めします。

于 2013-02-15T15:59:12.330 に答える