使用orderby和group by构建此LINQ查询的最佳方法是什么?

时间:2011-01-06 06:37:20

标签: linq count group-by sql-order-by

我正在学习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
}

1 个答案:

答案 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();