【问题标题】:How to retrieve data for two different portions of a single web page using LINQ from the same database table?如何使用 LINQ 从同一个数据库表中检索单个网页的两个不同部分的数据?
【发布时间】:2017-09-07 13:15:00
【问题描述】:

我正在使用代码优先方法在.NET MVC5 开展一个项目,我创建了一个数据库表,我想在索引页面或(主页)的两个不同部分(数据库的类别)中检索一些特定记录来自同一个数据库表。

我创建了下面的控制器,它适用于名为“最近事件”的部分之一,但是当我尝试检索主页第二部分的一些记录时,我感到困惑,假设它被命名为“Featured_Events”使用同一个控制器?

最初我只是希望这两个部分的逻辑都能正常工作,但如果专家正在阅读我的帖子,那么还请告诉我如何在特色事件部分中检索特定数量的记录,如您所知我正在检索最近事件中的 8 条记录,如果我想检索精选事件部分中的 12 条记录怎么办?

这是控制器:

public ActionResult Index()
{
     var result = (from i in _context.consult
                   orderby i.date_of_event descending
                   where i.category == "recent_events"
                   select i).Take(8);
     return View(result);
 }

只是为了进一步澄清:在视图中我使用foreach 循环来检索数据: 作为一个例子它看起来像这样:

@model Ienumurable <Example.Models.consultation>

近期活动部分代码

@foreach (var recent in Model)
{
    if (@recent.category == "recent_events")
    {
        <p>@recent.date</p>
        <p>@recent.details</p>
    }
}

特色活动部分代码

@foreach (var featured in Model)
{
    if (@featured.category == "featured_events")
    {
        <p>@featured.date</p>
        <p>@featured.details</p>
    }
}

如果有人能在这方面帮助我,我会非常高兴。

【问题讨论】:

    标签: asp.net asp.net-mvc linq ef-code-first


    【解决方案1】:

    假设您有两个要返回的项目列表,创建一个新类,将这两个列表作为公共属性保存,在控制器中填充两者并返回新类。

    您的模型现在将包含两者,您可以使用 Razor 对两者进行迭代。

    示例:

    public class EventsDataModel
    {
        public List<Event> RecentEvents { get;set; }
        public List<Event> FeaturedEvents { get;set; }
    
        public EventsDataModel()
        {
              RecentEvents = new List<Event>();
              FeaturedEvents = new List<Event>();
        }
    }
    

    您的控制器现在填充两者:

    public ActionResult Index()
    
        {
            var result = new EventsDataModel();
    
            result.RecentEvents = (from i in _context.consult
                          orderby i.date_of_event descending
                          where i.category == "recent_events"
                          select i).Take(8);
            result.FeaturedEvetns = whatever
                return View(result);
    
    
            }
    

    【讨论】:

    • 亲爱的 Andrei Dragotoniu,非常感谢您的回复。但是使用两个列表意味着有两个不同的类,这进一步意味着在数据库中有两个单独的表。这将在数​​据输入阶段产生冗余,因为两个部分共享相似的数据,但时间和受欢迎程度唯一不同。这意味着如果日期是最近的,它将转到最近的部分,并且如果在数据库表中将特色设置为是,那么它将转到特色部分,其中标题和完整描述等其余数据对于这两个部分将保持不变.
    • 由于我花了很长时间研究这个逻辑,我认为我在 LINQ 部分遗漏了一些东西,可以通过详细说明 LINQ 查询来修复它,你怎么看?无论如何,再次感谢您的友好回复。
    • 无论如何,今天我能够使用您的逻辑解决问题,我通过 Models 目录中的类稍微修改了数据库设计,然后应用了您的逻辑。再次非常感谢您,先生,非常感谢您的友好合作。
    猜你喜欢
    • 2015-12-21
    • 1970-01-01
    • 2019-12-09
    • 1970-01-01
    • 2011-12-15
    • 2018-07-04
    • 2015-06-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多