Asp.net T-Sql到linq的转换问题(按订单)
我在将下面的t-sql语句转换为Linq时遇到了一些问题(使用4.0实体框架) 我要走了 无法强制转换该类型 'System.Linq.IOrderedQueryableAsp.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
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.IOrderedQueryable1”强制转换为类型“System.Linq.IQueryable
1”。LINQ to Entities仅支持转换实体数据模型基元类型。有什么线索吗?您列出的查询是唯一为查询赋值的地方吗?@diceGuyd30对您之前的评论是。我注意到我在你的答案上贴错了新的错误信息。我得到一个编译错误选项,严格禁止从System.Linq.Iqueryable(库存)到System.Linq.IOrderedQueryable(库存)的隐式转换。Dim Query as IOrderedQueryable行下的所有内容都会作为编译问题被加下划线。看起来将其拆分成不同的部分就成功了。我很高兴它成功了,不过现在应该开始删除“ToList()”调用以节省性能。他们将问题引入到Linq到对象域,而不是Linq到实体域,它们实际上应该是这样的。很高兴它能工作!谢谢你的提示。我试过了,但出现了以下错误。无法将类型“System.Linq.IOrderedQueryable1”强制转换为类型“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
是什么?)?