Как я могу присоединиться к записям в LINQ? - PullRequest
0 голосов
/ 14 августа 2010

Я новичок в LINQ и пытаюсь разобраться с этим.Я пытаюсь получить записи для нескольких учетных записей (несколько идентификаторов учетных записей) и отсортировать результаты по дате.

В настоящее время я располагаю результаты в виде списка, в котором в каждом элементе списка содержится несколько строк / учетная запись.

Это близко, но не совсем то, что я хочу.Как вернуть результаты так, чтобы все результаты (то есть все записи, связанные с каждой учетной записью) были отсортированы по дате и возвращены как таковые.

Я предполагаю, что это какое-то соединение LINQ, но я не уверен, какой будет синтаксис.

public List<StatusUpdate> GetFriendStatusUpdatesByAccountId(Int32 accountId)
        {
            List<StatusUpdate> result;

            List<Friend> friends =
                _friendRepository.GetFriendsByAccountId(accountId);

            using (WorkbookDataContext dc = _conn.GetContext())
            {
                IEnumerable<StatusUpdate> statusUpdates = null;

                foreach (Friend friend in friends)
                {
                    Friend friend1 = friend;

                    statusUpdates = from su in dc.StatusUpdates
                                    where su.AccountId == friend1.MyFriendsAccountId
                                    orderby su.CreateDate descending
                                    select su;
                }

                if (statusUpdates != null) result = statusUpdates.ToList();
            }

            return result;
        }

Заранее спасибо.

РЕДАКТИРОВАТЬ:

Спасибо за ваше предложение.Я немного переработал его, чтобы получить доступ к OrderByDescending, но, похоже, не могу понять проблему «не удается разрешить символ» для друга и су (показано ниже в CAPS).Мне интересно, если вы предполагаете, что «друг в друзьях» обращался к Другу как к таблице LINQ (которая дала бы нам доступ к MyFriendsAccountId), а не к списку (который не дает нам прямой доступ к MyFriendsAccountId? В любом случае, я новичок LINQ).так что, возможно, я лаю не на том дереве. В любом случае, FRIEND в друзьях и SU выдают «не удается устранить ошибку символа», и я буду благодарен за предложения. Огромное спасибо за ваш отзыв ...

public List<StatusUpdate> GetFriendStatusUpdatesByAccountId(Int32 accountId)
        {
            List<StatusUpdate> result;

            using (WorkbookDataContext dc = _conn.GetContext())
            {
                List<Friend> friends =
                _friendRepository.GetFriendsByAccountId(accountId);

                IEnumerable<StatusUpdate> statusUpdates = 
                    from su in dc.StatusUpdates
                    join friend in friends
                    on FRIEND.MyFriendsAccountId
                    equals SU.AccountId
                    select su;

                    result = 
                        statusUpdates.OrderByDescending
                        (su => su.CreateDate).ToList();
            }

            return result;
        }

1 Ответ

1 голос
/ 14 августа 2010

Меня немного смущает то, что вы пытаетесь сделать, ваш код, кажется, перезаписывает переменную statusUpdates внутри цикла foreach , и, как видно, результатвсегда будет получать вам отсортированные обновления статуса для ПОСЛЕДНЕГО друга в списке друзей .

Если я правильно понимаю ваш вопрос, у вас есть отношения многие к одному между Другом иИдентификатор учетной записи, и у каждого друга есть номер StatusUpdate, и вы хотите получить все StatusUpdate, связанные со всеми друзьями, имеющими одинаковый идентификатор учетной записи, и отсортировать их по CreatedDate по убыванию?

Если это такЯ думаю, это может быть то, что вы ищете:

public List<StatusUpdate> GetFriendStatusUpdatesByAccountId(Int32 accountId)
{
    List<StatusUpdate> result;

    List<Friend> friends = _friendRepository.GetFriendsByAccountId(accountId);

    using (WorkbookDataContext dc = _conn.GetContext())
    {
        var statusUpdates = 
           from su in dc.StatusUpdates
           join friend in friends on su.AccountId equals friend.MyFriendsAccountId
           select su;

        return statusUpdates.OrderByDescending(su => su.CreateDate)
                            .ToList();
    }
}

Вы можете в равной степени выполнять объединение, используя лямбда-выражения, но я обычно предпочитаю синтаксис запроса linq, когда речь идет о соединениях, поскольку они более чистые.

Надеюсь, это даст вам то, что вы хотите, если вы ищете еще несколько примеров выполнения объединений в linq, у меня есть несколько примеров здесь .

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