【问题标题】:Top 5 LINQ query with group by using Entity Framework使用实体框架进行分组的前 5 个 LINQ 查询
【发布时间】:2018-08-03 15:56:14
【问题描述】:

我需要使用实体框架进行分组的前 5 个 LINQ 查询,下面是我需要 LINQ 查询的 sql 查询。

select top 5 
    EventId,
    Datename(day, EventDate) as Day, 
    convert(varchar(3), EventDate, 100) as Month,  
    Datename(yy, EventDate) as year,
    Title, Description, ThumbImage  
from 
    EventGalleries 
group by 
    EventId, Title, EventDate, Description, ThumbImage 
order by 
    EventDate desc

这是我在 SQL Server 中的表结构:

这是我的操作方法,我需要一个 linq 查询来将列表返回到我的视图:

public ActionResult Gellery()
{
        var list = db.EventGallerys.ToList();// i need linq query here in place of this list
        return View(list);
}

这是我的模型类:

public class EventGallery
{
    [Key]
    public int Sno {get;set;}
    public string ImageName { get; set; }
    public string ThumbImage { get; set; }
    public string Title { get; set; }
    public string Description { get; set; }
    public DateTime EventDate { get; set; }    
    public string EventId { get; set; }
    public string GalleryType { get; set; }  
    public string IP { get; set; }
    public string SubmittedBy { get; set; }
    public DateTime GalleryCreatedDate { get; set; }
    public string Status { get; set; }
   //  Sno,ImageName,ThumbImage,Title,Description,EventDate,GalleryCreatedDate,EventId,GalleryType,Status

    public EventGallery()
    {
        GalleryCreatedDate = DateTime.Now;
        Status = "Active";
    }
}

提前感谢您的努力。

【问题讨论】:

    标签: c# asp.net linq razor


    【解决方案1】:
    db.EventGallerys
      .GroupBy(eg => new { eg.EventId, eg.Title, eg.EventDate, eg.Description, eg.ThumbImage })
      .OrderByDescending(eg => eg.Key.EventDate)
      .Take(5)
      .AsEnumerable()
      .Select(eg => new {
          EventId = eg.Key.EventId,
          Day = eg.Key.EventDate.ToString("D"), 
          Month = eg.Key.EventDate.ToString("MMM"),  
          Year = eg.Key.EventDate.ToString("yyyy"),
          Title = eg.Key.Title, 
          Description = eg.Key.Description,
          ThumbImage = eg.Key.ThumbImage 
       })
      .ToList();
    

    【讨论】:

    • GroupBy 无效/无法编译,因为您需要使用 lambda 参数来访问其属性 eg => new { eg.EventId, eg.Title ... }Select 不起作用(假设是 SQL 提供程序),因为提供程序无法将 ToString("specifier") 转换为 SQL。 eg.EventDate.Day 可能可以工作,但如果不行,您必须首先选择一些属性,然后在内存中本地处理它们(添加ToList()AsEnumerable() 某处)选择 EventId、EventDate、标题、描述和 ThumbImage
    • 是的,我忘了添加 eg.* 但我想这很明显:) 对于第二部分,asenumerable 执行查询,因此选择不是在 sql 中而是在 c# 中执行。
    • 我错过了您代码中的AsEnumerable,因此您可以忽略该评论。但是,对于缺少的eg.,它很明显:OP 使用您的代码问了另一个问题,因为它没有为他编译。问题之一?缺少“例如”。您应该通过编辑缺失的部分来修复您的答案。此外,OrderByDescending 不会在不编译 eg=>eg.Key.EventDate 的情况下进行编译,Select 也不会编译,因为您正在使用 IEnumerable<IGrouping<TKey, Element>>
    猜你喜欢
    • 1970-01-01
    • 2017-03-06
    • 1970-01-01
    • 1970-01-01
    • 2021-12-25
    • 2020-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多