0

Sharepoint 2010 には 3 つのリストがあり、リストを取得して関連付ける作業コードがあります。私の問題は、ページの読み込みに約 15 秒かかることです。私はLINQ to SharepointとLINQ全般の初心者です。私の質問は: このコードをより速く実行する方法はありますか?

                SeatingChartContext dc = new SeatingChartContext(SPContext.Current.Web.Url);
                EntityList<Seating_chartItem> seatCharts = dc.GetList<Seating_chartItem>("seating_chart");
                EntityList<UsersItem> users = dc.GetList<UsersItem>("users");
                EntityList<Excluded_usersItem> exusers = dc.GetList<Excluded_usersItem>("excluded_users");
               // EntityList<LogsItem> logs = dc.GetList<LogsItem>("logs");

                List<Seating_chartItem> seatList = (from seat in seatCharts where seat.Room == 0 where seat.Floor == floor select seat).ToList();
                List <UsersItem> usersList = (from user in users select user).ToList();
                List <Excluded_usersItem> xusersList = (from xuser in exusers select xuser).ToList();

                var results = from seat in seatList
                              join user in usersList on
                              seat.User_id equals user.User_id
                              where seat.Room == 0
                              where seat.Floor == floor
                              where !(from xuser in xusersList select xuser.User_id).Contains(user.User_id)
                              select new 
                                         {
                                             sid = seat.Seat_id,
                                             icon = seat.Icon,
                                             topCoord = seat.Top_coord,
                                             leftCoord = seat.Left_coord,
                                             name = user.Name,
                                             phone = user.Phone,
                                             mobile = user.Mobile,
                                             content = seat.Content
                                         };

控えめに言っても、このコードにかかる時間は苛立たしいものです。

ありがとう。

4

1 に答える 1

1

xusersList 差し迫ったこと: 結合内で毎回再クエリを実行しています:

where !(from xuser in xusersList select xuser.User_id).Contains(user.User_id)

代わりに、最初にユーザー ID のみを抽出します (それが必要な唯一のものであるため)。

var xusersList = (from xuser in exusers select xuser.User_id).ToList();

次に、それを直接使用します。

  where !xusersList.Contains(user.User_id)

さらに良い-クエリの前に有効なユーザーを決定します。

usersList = usersList.Where( user => !xusersList.Contains(user.User_id))
                     .ToList();

これで、この where 条件をクエリから完全に削除できます。

また、これらの条件が不要と思われる場所:

where seat.Room == 0
where seat.Floor == floor

seatListすでにこの方法でフィルタリングしているためです。

いくつかのパフォーマンス データをログに記録して、実際に最も時間がかかるものを確認する必要があると言いましたが、最初のリストまたは実際の結合/linq クエリを取得していますか?

于 2011-05-03T22:55:42.523 に答える