Asp.net T-Sql到linq的转换问题(按订单)

Asp.net T-Sql到linq的转换问题(按订单),asp.net,vb.net,linq,entity-framework,linq-to-entities,Asp.net,Vb.net,Linq,Entity Framework,Linq To Entities,我在将下面的t-sql语句转换为Linq时遇到了一些问题(使用4.0实体框架) 我要走了 无法强制转换该类型 'System.Linq.IOrderedQueryable1'到 键入“System.Linq.IQueryable1”。林克 “到实体”仅支持强制转换 实体数据模型基本类型 T-Sql 这就是我现在拥有的(在Linqer的帮助下) 当我做这行的时候,它现在崩溃了 query.ToList() 谢谢您的时间。您的“问题”就在第一行。您指定的查询返回一个IOrderedQueryabl

我在将下面的t-sql语句转换为Linq时遇到了一些问题(使用4.0实体框架)

我要走了

无法强制转换该类型 'System.Linq.IOrderedQueryable
1'到
键入“System.Linq.IQueryable
1”。林克 “到实体”仅支持强制转换 实体数据模型基本类型

T-Sql

这就是我现在拥有的(在Linqer的帮助下)

当我做这行的时候,它现在崩溃了

query.ToList()

谢谢您的时间。

您的“问题”就在第一行。您指定的查询返回一个
IOrderedQueryable(库存)
,您正试图将其分配给
IQueryable(库存)
类型的变量。由于延迟执行,只有在
query.ToList()
之前才会出现错误。如果在项目中将“option infer”设置为on,并且您的查询类似于:

Dim query =
        From d In ctx.Inventories
        Where
            (From e In ctx.LastVieweds _
            Group e By _
              e.ApplicationId, _
              e.SomeUserId _
             Into g = Group _
            Where DfaitEdsId = user _
            Order By g.Max(Function(p) p.Id) Descending _
            Select ApplicationId Take 5 _
            ).Contains(d.Id) _
        Select d
或者您可以将
query
的类型更改为
IOrderedQueryable(库存)

注意:您所拥有的在LINQtoSQL中运行良好,但实体在转换时要严格得多

编辑: 好吧,让我们试着深入一点。请告诉我哪一行与以下内容有关:

Dim innerList = (From e In ctx.LastVieweds _
                Group e By _
                e.ApplicationId, _
                e.SomeUserId _
                Into g = Group _
                Where DfaitEdsId = user _
                Order By g.Max(Function(p) p.Id) Descending _
                Select ApplicationId Take 5).ToList()
Dim query = (From d In ctx.Inventories
            Where innerList.Contains(d.Id) _
            Select d).ToList()

如果使用“ToList()”枚举查询太多,请不要忘记将结果缩减一点。这两种变量的类型现在都是
列表(库存)

您的“问题”就在第一行。您指定的查询返回一个
IOrderedQueryable(库存)
,您正试图将其分配给
IQueryable(库存)
类型的变量。由于延迟执行,只有在
query.ToList()
之前才会出现错误。如果在项目中将“option infer”设置为on,并且您的查询类似于:

Dim query =
        From d In ctx.Inventories
        Where
            (From e In ctx.LastVieweds _
            Group e By _
              e.ApplicationId, _
              e.SomeUserId _
             Into g = Group _
            Where DfaitEdsId = user _
            Order By g.Max(Function(p) p.Id) Descending _
            Select ApplicationId Take 5 _
            ).Contains(d.Id) _
        Select d
或者您可以将
query
的类型更改为
IOrderedQueryable(库存)

注意:您所拥有的在LINQtoSQL中运行良好,但实体在转换时要严格得多

编辑: 好吧,让我们试着深入一点。请告诉我哪一行与以下内容有关:

Dim innerList = (From e In ctx.LastVieweds _
                Group e By _
                e.ApplicationId, _
                e.SomeUserId _
                Into g = Group _
                Where DfaitEdsId = user _
                Order By g.Max(Function(p) p.Id) Descending _
                Select ApplicationId Take 5).ToList()
Dim query = (From d In ctx.Inventories
            Where innerList.Contains(d.Id) _
            Select d).ToList()

如果使用“ToList()”枚举查询太多,请不要忘记将结果缩减一点。这两种变量的类型现在都是
列表(库存)

,谢谢你的提示。我试过了,但出现了以下错误。无法将类型“System.Linq.IOrderedQueryable
1”强制转换为类型“System.Linq.IQueryable
1”。LINQ to Entities仅支持转换实体数据模型基元类型。有什么线索吗?您列出的查询是唯一为查询赋值的地方吗?@diceGuyd30对您之前的评论是。我注意到我在你的答案上贴错了新的错误信息。我得到一个编译错误选项,严格禁止从System.Linq.Iqueryable(库存)到System.Linq.IOrderedQueryable(库存)的隐式转换。Dim Query as IOrderedQueryable行下的所有内容都会作为编译问题被加下划线。看起来将其拆分成不同的部分就成功了。我很高兴它成功了,不过现在应该开始删除“ToList()”调用以节省性能。他们将问题引入到Linq到对象域,而不是Linq到实体域,它们实际上应该是这样的。很高兴它能工作!谢谢你的提示。我试过了,但出现了以下错误。无法将类型“System.Linq.IOrderedQueryable
1”强制转换为类型“System.Linq.IQueryable
1”。LINQ to Entities仅支持转换实体数据模型基元类型。有什么线索吗?您列出的查询是唯一为查询赋值的地方吗?@diceGuyd30对您之前的评论是。我注意到我在你的答案上贴错了新的错误信息。我得到一个编译错误选项,严格禁止从System.Linq.Iqueryable(库存)到System.Linq.IOrderedQueryable(库存)的隐式转换。Dim Query as IOrderedQueryable行下的所有内容都会作为编译问题被加下划线。看起来将其拆分成不同的部分就成功了。我很高兴它成功了,不过现在应该开始删除“ToList()”调用以节省性能。他们将问题引入到Linq到对象域,而不是Linq到实体域,它们实际上应该是这样的。很高兴它能工作!我这里有一个类似的问题:。我怀疑VB.Net编译器是罪魁祸首,因为我可以让它在C#中工作。您能否提供更多的上下文,以便我们可以尝试重新解决您的问题(请解释
DfaitEdsId
user
是什么)?我这里有一个类似的问题:。我怀疑VB.Net编译器是罪魁祸首,因为我可以让它在C#中工作。你能不能再给我们一点背景,这样我们就可以重新解释你的问题了(请解释一下
DfaitEdsId
user
是什么?)?