【问题标题】:Entity framework with "Group By" and/or "Order by"具有“分组依据”和/或“排序依据”的实体框架
【发布时间】:2009-10-13 20:44:26
【问题描述】:

假设我们有一个允许用户下载东西的项目。在主页上,我想显示按下载次数排序的下载次数最多的文件!所有这些都使用 EF。

我该怎么做!!我用 Group By 尝试了很多事情(当你在一个对象中有很多信息时,这是一场噩梦)。我仍然不知道如何做到这一点......

var query = from details in m_context.TransactionDetails
                        where details.Chanson != null
                        group details by details.Items into AnItem
                        orderby AnItem.Count()
                        select new Item() {
                            IdItem = Chansons.Key.IdItem,
                            ItemState= Chansons.Key.ItemState,
                            [...This object got something like 20 including links to other objects ... ]
                        };

有人有想法吗?

谢谢 :o)

哦,对不起我的英语,我正在尽力而为,但我来自魁北克(通常说法语)。

【问题讨论】:

    标签: c# asp.net visual-studio-2008 entity-framework


    【解决方案1】:

    致敬!

    我会在这里猜测一下你的数据模型,但我认为你不需要分组:

    var query = from details in m_context.TransactionDetails
                where details.Chanson != null
                orderby details.Items.Count() descending
                select new Item
                {
                    IdItem = details.Chanson.IdItem,
                    ItemState= details.Chanson.ItemState,
                    // ...
                };
    

    好机会!

    更新:对于专辑:

    var query = from details in m_context.TransactionDetails
                where details.DisqueCompact != null
                orderby details.Items.Count() descending
                select new Item 
                {
                    IdItem = details.DisqueCompact.IdItem,
                    ItemState= details.DisqueCompact.QuelqueChose...
                    // ...
                };
    

    根据您的数据模型,您可能需要两个查询。

    【讨论】:

    • 啊,太好了!然后我不需要制作“新项目()”!我只是必须返回一个选定对象的列表,然后就可以了!哈哈,“我可以让事情变得困难,为什么要轻松”......魁北克谚语。
    • 嗬,在检查我的代码后,它不工作!对不起!在这种情况下,我想获得一个“TransactionDetails”列表,该列表按下载“TransactionDetails.Chanson”的次数排序......我想我必须做一个分组,然后开始计算。
    • 在我看来(再次,没有看到你的模型)听起来不像你需要一个小组。你说“它不工作”。您能否准确解释什么不起作用?
    • 你是说你想要一个歌曲和专辑的组合列表,而你当前的查询是只返回歌曲,而不是专辑?如果是这样,请删除“details.Chanson != null”并更改 Item 以使 IdItem 可以为空(以及 Item 上的任何其他属性,因为并非所有返回的记录都有歌曲)。
    • 我给你的查询应该适用于歌曲。我将尝试查询专辑,但我必须为此猜测数据模型属性名称。
    【解决方案2】:

    对于数据分组,您可以阅读 MSDN 中的this How-To。

    【讨论】:

    • 是的,我已经阅读了这个帖子,但仍然找不到解决我的问题的方法:o|
    【解决方案3】:

    这是你应该如何做的一个例子:

    //this is a entity framework objects
    CTSPEntities CEntity = new CTSPEntities();
    
    //and this is your example query
    var query = (from details in CEntity.Purchase_Product_Details
                 group details by new { details.Product_Details.Product_Code, details.Product_Details.Product_Name} into Prod
                 select new
                 {
                     PID = Prod.Key.Product_Code,
                     PName = Prod.Key.Product_Name,
                     Amount = Prod.Sum(c => c.Lot_Amount),
                     count= Prod.Count()
                 }).OrderBy(x => x.Amount);
    foreach (var item in query)
    {
        Console.WriteLine("{0},{1},{2},{3}",item.PID,item.PName,item.Amount,item.count);
    }
    Console.ReadLine();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-12
      • 1970-01-01
      相关资源
      最近更新 更多