我是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;
}
答案 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。