我正在学习LINQ,它让我了解了如何从mongoDB中按照我想要的方式获取数据。似乎应该有比这更好的方法。
基本前提是在UserMessage
集合中存在我正在尝试分组的ID。我想按DateCreated
中的UserMessage
订购。
同样为团队返回COUNT也很不错,但我想我已经准备好了一些帮助。 :)
//get from the db all the mssages to this user and from
var result = (from messages in session.All<UserMessage>()
where messages.To == User.Identity.Name ||
messages.From == User.Identity.Name
orderby messages.DateCreated descending
select messages).ToList().GroupBy(t => t.AssociatedMessageID);
//.Select(g => new { AssociatedMessageID = g.Key });
var result2 = from m in result.ToList()
orderby m.First().DateCreated descending
select m;
List<IGrouping<string,UserMessage>> aryMsg = result2.ToList();
foreach (IGrouping<string,UserMessage> um in aryMsg)
{
//in this loop assign various members of each UserMessage to a view model
}
答案 0 :(得分:2)
没有必要进行那么多ToList()
次转换(除非mongoDB不支持分组)。除了伤害表现之外别无所求。组的第二个排序不是必需的,因为所有消息都已排序,因此组也应该排序。最终,我认为您的查询就是这样:
var aryMsg = (from um in session.All<UserMessage>()
where um.To == User.Identity.Name
|| um.From == User.Identity.Name
orderby um.DateCreated descending)
.AsEnumerable()
.GroupBy(um => um.AssociatedMessageID)
.ToList();