将 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测试,是连接到数据上下文的。
也许您需要在两个集合(Visit
和 vw_MaterView
)前加上上下文变量名称。类似于dc.Visit
和dc.vw_MasterView
。我没有要测试的 Linqer,抱歉。以上是关于将 SQL 语句转换为 LINQ VS2010的主要内容,如果未能解决你的问题,请参考以下文章
将 SQL 语句转换为 DataTable 上的 LINQ 查询
C# 将带有 Case 语句的 SQL 查询转换为 LINQ
帮助将 SQL 语句转换为 LINQ Lambda(在 group by 和 sum 方面需要帮助)