【问题标题】:using where clause after get last record?在获取最后一条记录后使用 where 子句?
【发布时间】:2014-03-09 14:15:55
【问题描述】:
using (EPOSEntities1 db = new EPOSEntities1())
{
    List<ActionPerformed> PLUlist = db.ActionPerformeds.ToList();
    ActionPerformed Latest_PLU = PLUlist.OrderByDescending(x => x.Date).FirstOrDefault();
}

这将返回最后存储的记录。但是,我现在在 File_Name 表中添加了另一列,如何在其中添加 where 子句来表示 orderByDescending 以获取最新文件,然后从那里获取 file_Name 为“Sales”的第一条记录。??

例如

    File_Name Date
12) Products 11/02/2014
13) Sales    11/02/2014
14) Products 11/02/2014

这将返回记录 13??

【问题讨论】:

  • 为什么要将整个列表拉入内存以过滤掉一条记录,而不是在数据库中进行所有过滤?

标签: c# asp.net asp.net-mvc linq asp.net-mvc-3


【解决方案1】:

Where 方法可以将您的集合过滤到仅File_Name"Sales" 的项目。

考虑在执行调用之前放置 LINQ 查询,以便 LINQ-to-DB 提供程序可以在服务器端执行查询并且只返回一项。您所做的是将整个 ActionPeformeds 表从服务器带到客户端,然后在客户端执行查询。

ActionPerformed Latest_PLU = db.ActionPerformeds
    .Where(x => x.File_Name == "Sales")
    .OrderByDescending(x => x.Date)
    .FirstOrDefault();

“执行调用”是指ToList()First()FirstOrDefault()

【讨论】:

  • 那里,未控制,+1 表示比问题本身更深一英寸。
【解决方案2】:

OrderByDescending 之前使用Where 子句,如果您调用ToList,它将导致立即评估查询并填充记录。如果在评估之前调用 Where 会更好。

ActionPerformed Latest_PLU = db.ActionPerformeds.Where(c=>File_Name == "Sales")
                             .OrderByDescending(x => x.Date)
                             .FirstOrDefault();

【讨论】:

  • 只是一个普通的巨魔。我有同样的事情,这真的让我很困扰。
【解决方案3】:
ActionPerformed Latest_PLU = PLUlist.Where(p => p.File_Name == 'Sales').OrderByDescending(x => x.Date).FirstOrDefault();

【讨论】:

    猜你喜欢
    • 2011-10-21
    • 2019-05-04
    • 2015-01-29
    • 2021-12-26
    • 1970-01-01
    • 1970-01-01
    • 2012-02-13
    • 2012-01-23
    相关资源
    最近更新 更多