【问题标题】:Mimic SQL Subquery Script with Lambda / LINQ使用 Lambda / LINQ 模拟 SQL 子查询脚本
【发布时间】:2023-03-20 05:05:01
【问题描述】:

我正在尝试使用我的首席开发人员创建的 ASP.NET MVC(实体框架)模仿 T-SQL 脚本,但最近刚刚辞职,现在正在执行其他任务。

该脚本将在最后使用日期之前收集有关项目的所有必需信息,并计算使用次数。 SQL 脚本对 ID 进行分组,计算与该分组 ID 关联的 PickID,并收集最新日期:

SELECT 
    s.ID, s.ItemCount, s.DateUsed, p.CustNum, p.OrdNum
FROM 
    Tracker as t    
INNER JOIN
    (SELECT 
         ID, COUNT(PickID) ItemCount, MAX(DateUsed) DateUsed
     FROM 
         Boxes 
     WHERE 
         NOT ID = '1'
     GROUP BY 
         ID) s ON t.ID = s.ID
INNER JOIN 
    Boxes as s2 ON s.ID = s2.ID AND s.DateUsed = s2.DateUsed
INNER JOIN 
    Header as p ON s2.PickID = p.PickID;

给定的脚本非常适合我们的自动电子邮件系统,但我们需要基于浏览器的应用程序在任何给定时间创建一个包含完全相同信息的文件,而不仅仅是每周一次。我有文件创建和自动发送电子邮件,只是很难将其转换为 lambda 表达式,LINQ 也很好。

我一直在搜索 stackoverflow 和 Microsoft 的教程,但几乎没有任何帮助,所以如果有人能指出我正确的方向或展示并解释如何做到这一点,那就太棒了。

【问题讨论】:

  • 如果您的查询“完美运行”,您为什么要尝试在不(明确)使用 SQL 的情况下重新实现它?
  • 该脚本用于自动发送电子邮件,当然仓库人员无法访问服务器,除非通过我们基于浏览器的应用程序。我的老板希望经理们也能够随时在文件中获取这些信息。
  • 那么为什么您的应用程序不能按原样执行查询呢?甚至执行包含此查询的存储过程?
  • 有没有办法使用Entity Framework MVC和lambda/LINQ来产生初始SQL脚本的结果?在我看来,编写 lambda 或 LINQ 查询比使用我们的框架按原样运行查询更容易。至于存储过程,谢谢你的建议,以后我绝对会使用它。我仍然必须遵循我当前的首席开发人员的要求,那就是让 lambda / LINQ 运行查询。

标签: c# asp.net-mvc linq tsql lambda


【解决方案1】:

我喜欢这样做。

var p = boxes.GroupBy(x => x.ID).Where(grp => grp.Key != -1)
            .Select(grp => new
            {
                ID = grp.Key,
                ItemCount = grp.Count(),
                DateUsed = grp.Max(x => x.DateUsed)
            });

var q = from x in tracker
        join y in p on x.ID equals y.ID
        join z in boxes on y.ID equals z.ID
        join a in headers on z.PickID equals a.PickID
        select new
        {
            y.ID,
            y.ItemCount,
            DateUser = y.DateUsed,
            a.CustNum,
            a.OrdNum
        };

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-30
    • 2018-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多