首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有Linq-to-entities的SQL行号

带有Linq-to-entities的SQL行号
EN

Stack Overflow用户
提问于 2010-05-02 02:06:56
回答 1查看 1.6K关注 0票数 0

我正在将我的项目转换为使用EF,并希望将存储过程转换为Linq- to -entities查询。

下面是我的SQL查询(简单版本),我在转换时遇到了问题:

代码语言:javascript
复制
SELECT 
       CategoryID, Title as CategoryTitle,Description, 
       LastProductTitle,LastProductAddedDate
FROM
(
    SELECT
        C.CategoryID, C.Title,C.Description, C.Section,
        P.Title as LastProductTitle, P.AddedDate as LastProductAddedDate,                                          
        ROW_NUMBER() OVER (PARTITION BY P.CategoryID ORDER BY P.AddedDate DESC) AS Num

    FROM 
         Categories C         
         LEFT JOIN Products P ON P.CategoryID = C.CategoryID
) OuterSelect

WHERE 
     OuterSelect.Num = 1

换句话说:我想返回所有类别(从类别表)和标题和产品的添加日期(从Products表),这是最后添加到这个类别。

如何使用实体框架查询来实现这一点?

以最有效的方式。

EN

回答 1

Stack Overflow用户

发布于 2010-05-02 02:55:59

这种情况下是否需要Row_Number()?

下面返回Northwind数据库中所有客户的最新订单:

代码语言:javascript
复制
from c in Customers
join o in Orders on c.CustomerID equals o.CustomerID
group o by  new { c.CustomerID, c.ContactName}  into g
select new {
 CustomerID = g.Key.CustomerID,
 Name = g.Key.ContactName,
 OrderDate = g.Max(a=> a.OrderDate)
}

(从LinqPad创建的)查询是

代码语言:javascript
复制
SELECT MAX([t1].[OrderDate]) AS [OrderDate], [t0].[CustomerID], [t0].[ContactName] AS [Name]
FROM [Customers] AS [t0]
INNER JOIN [Orders] AS [t1] ON [t0].[CustomerID] = [t1].[CustomerID]
GROUP BY [t0].[CustomerID], [t0].[ContactName]

这个代码执行的是左连接

代码语言:javascript
复制
from c in Customers
         join o in Orders on c.CustomerID equals o.CustomerID into g
         from a in g.DefaultIfEmpty()
         group a by new { c.CustomerID, c.ContactName}  into g
         select new
         {
             g.Key.CustomerID,
             g.Key.ContactName,
             RecentOrder  = g.Max(a=> a.OrderDate) 
         }

生成的查询是

代码语言:javascript
复制
SELECT MAX([t1].[OrderDate]) AS [RecentOrder], [t0].[CustomerID], [t0].[ContactName]
FROM [Customers] AS [t0]
LEFT OUTER JOIN [Orders] AS [t1] ON [t0].[CustomerID] = [t1].[CustomerID]
GROUP BY [t0].[CustomerID], [t0].[ContactName]
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2751009

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档