C# 实体框架,带“;分组方式;和/或;“订购”;

C# 实体框架,带“;分组方式;和/或;“订购”;,c#,asp.net,visual-studio-2008,entity-framework,C#,Asp.net,Visual Studio 2008,Entity Framework,假设我们有一个允许用户下载东西的项目。在主页上,我想按下载数量显示下载最多的文件!所有这些都是使用EF 我该怎么做!!我已经尝试了很多关于GroupBy的事情(当你在一个对象中获得了很多信息时,这是一场噩梦)。我仍然不知道该怎么做 var query = from details in m_context.TransactionDetails where details.Chanson != null

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

我该怎么做!!我已经尝试了很多关于GroupBy的事情(当你在一个对象中获得了很多信息时,这是一场噩梦)。我仍然不知道该怎么做

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)


哦,对不起,我的英语说得很好,但我来自魁北克(通常说法语)。

关于分组数据,您可以阅读MSDN中的如何操作。

敬礼

在这里,我将稍微猜测一下您的数据模型,但我认为您不需要分组:

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...
                // ...
            };

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

这是一个应如何执行的示例:

//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();

是的,我读过这篇文章,但仍然没有找到解决我问题的方法:啊,太好了!那么我就不需要做“新项目()”!!我只需要返回一个所选对象的列表,然后就可以了!哈哈,“既然我能让它变得困难,为什么要轻易地去做呢”。。。魁北克谚语。好吧,检查我的代码后,它不工作了!很抱歉在本例中,我希望获得一个“TransactionDetails”列表,该列表按“TransactionDetails.Chanson”下载的时间顺序排列。。。我想我必须做一个分组,然后做一个分组。我觉得(同样,在没有看到你的模特的情况下)你不需要分组。你说“它不工作”。你能准确地解释一下什么不工作吗?你是说你想要一个歌曲和专辑的组合列表,而你当前的查询只返回歌曲,而不是专辑?如果是这样,请删除“details.Chanson!=null”并更改项,使IdItem可以为null(以及项上的任何其他属性,因为并非所有返回的记录都有歌曲)。我给您的查询应该适用于歌曲。我将尝试查询相册,但我必须猜测相册的数据模型属性名称。