【问题标题】:translate first_value over partition by to linq将分区上的 first_value 转换为 linq
【发布时间】:2016-11-24 14:49:37
【问题描述】:

我是 LINQ 新手,对于像我这样非常习惯于普通 SQL 查询的人来说,学习仍然是一个挑战。

我在 SQL 中有以下查询,使用左连接的子查询和 SQL 服务器标准函数(如 FIRST_VALUE),这可以翻译成 LINQ 吗? 不知道如何在 LINQ 中重写这个 first_value 函数..

SELECT *
FROM dbo.Stock

LEFT JOIN (

    SELECT distinct stockID, FIRST_VALUE(unitPrice) OVER (PARTITION BY stockid ORDER BY dbo.SalesOrder.orderDate desc ) last_unit_cost,
                             FIRST_VALUE(orderDate) OVER (PARTITION BY stockid ORDER BY dbo.SalesOrder.orderDate desc ) last_order_date

    FROM dbo.SalesOrderDetail 
    JOIN dbo.SalesOrder ON SalesOrder.salesOrderID = SalesOrderDetail.salesOrderID 
    WHERE customerID = 4
) x ON x.stockID = Stock.stockID

【问题讨论】:

    标签: c# entity-framework linq


    【解决方案1】:

    您可以使用.First() 方法从实现IEnumberable 的集合中获取第一个元素。

    一个例子:

    int[] number = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 };
    var num = number.Where(n => n > 10).First(); 
    

    where方法查看数字数组,找到值大于10的值。

    这将返回一个只有 11 的集合,然后我们得到第一个返回 11 的值。

    Scott Allen 的 Linq Fundamental on Pluralsight 是一门很棒的课程。您可以在哪里找到有关 firstOrDefault 等其他运算符的信息。

    【讨论】:

    • 不幸的是,这根本无法复制 SQL Server 中 first_value 的功能。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多