将 SQL 语句转换为 LINQ VS2010

Posted

技术标签:

【中文标题】将 SQL 语句转换为 LINQ VS2010【英文标题】:Convert SQL Statement to LINQ VS2010 【发布时间】:2012-05-18 00:13:12 【问题描述】:

如果能帮助我将以下 sql 语句转换为 linq,我将不胜感激:

select *
from (
    select 
        *,
        rn = row_number() over (partition by ClientId order by VisitId)
    from
        Visit
) activityWithRn
inner join vw_MasterView on  vw_MasterView.VisitId = activityWithRn.VisitId
where activityWithRn.rn =3

当我使用 Linqer(一个很棒的程序)时,我收到以下错误:

SQL cannot be converted to LINQ: Field [rn = row_number() over (partition by ClientId order by VisitId)] not found in the current Data Context.

提前致谢。

【问题讨论】:

您没有提及您使用的是哪个 ORM,但如果您使用的是实体框架,您可以继续使用带有 ExecuteStoreQuery 的 SQL - msdn.microsoft.com/en-us/library/dd487208.aspx 【参考方案1】:

我认为row_number() over 的 LINQ 中除了使用 Skip...Take 之外没有任何对应的功能:

var q = (from v in Visit
            join mv in vw_MasterView on v.VisitId equals mv.VisitId 
            orderby v.VisitId
            select v).Skip(2).Take(1);

【讨论】:

谢谢,我收到此错误:找不到“加入”。当前上下文中不存在名称“vw_MasterView” 我希望您已经有一个与 SQL 视图 vw_MasterView 匹配的集合(对象/数据上下文中的集合或对象集合)。该工具将如何为您创建此对象? 我用Linqer测试,是连接到数据上下文的。 也许您需要在两个集合(Visitvw_MaterView)前加上上下文变量名称。类似于dc.Visitdc.vw_MasterView。我没有要测试的 Linqer,抱歉。

以上是关于将 SQL 语句转换为 LINQ VS2010的主要内容,如果未能解决你的问题,请参考以下文章

如何将以下 SQL 语句转换为 LINQ 方法语法

将 SQL 语句转换为 DataTable 上的 LINQ 查询

C# 将带有 Case 语句的 SQL 查询转换为 LINQ

帮助将 SQL 语句转换为 LINQ Lambda(在 group by 和 sum 方面需要帮助)

将包含 where、group by、sum 和必须的 MySQL 语句转换为 Linq to Sql

无法将 mysql 查询转换为 linq 语句