如何在LINQ中加入记录?

时间:2010-08-13 20:36:23

标签: linq join

我是LINQ的新手,我正试图对此进行排序。 我试图获取多个帐户(多个帐户ID)的记录 并根据日期对结果进行排序。

我目前所拥有的是将结果放入列表中 这样每个列表项中包含多行/帐户。

这很接近但不完全是我想要的。如何返回结果,以便所有结果(即与每个帐户关联的所有记录)按日期排序并按原样返回。

我想这是某种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但似乎无法弄清楚“无法解析符号” 朋友 su 的问题(如下面的CAPS所示)。我想知道你是否假设“朋友中的朋友”正在访问朋友作为LINQ表(这将给出 我们访问MyFriendsAccountId)而不是List(不直接给我们 访问MyFriendsAccountId?无论如何,我是一个LINQ newb所以,也许我正在咆哮 错树。无论如何,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 个答案:

答案 0 :(得分:1)

我对你要做的事感到有点困惑,你的代码似乎覆盖了 foreach 循环中的 statusUpdates 变量,看起来很像,结果将始终为朋友列表中的最后一位朋友提供已排序的状态更新。

如果我正确理解您的问题,您在朋友和帐户ID之间存在多对一关系,并且每个朋友都有一些StatusUpdate,并且您希望获得与所有朋友关联的所有StatusUpdate共享相同的帐户ID,并按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();
    }
}

你可以使用lambda表达式同样地进行连接,但是当它们更加清晰时,我通常更喜欢linq查询语法。

希望这能为您提供所需内容,如果您正在寻找更多关于在linq中进行联接的示例,我有一些示例here