按照我之前的问题(
Only parameterless constructors and initializers are supported in LINQ to Entities),我仍然有一个问题.我只是想了解发生了什么以及为什么某些东西在一个案例而不是另一个案例中起作用.
如果要在Linq to entity查询中强制转换字符串参数(例如查询字符串参数),则必须使用新的Guid(request.querystring(“param”))而不是Guid.parse(request.querystring(“param”) “)). Guid.parse将抛出异常,因为Linq无法将其转换为sql.
我经常在我的代码中使用这种技术,它可以工作.
dim lstResult = DB.MyTable.Where(function(f) f.key = new Guid(request.querystring("param"))).toList()
但是,当我尝试使用Linq查询创建匿名类型时,它将抛出异常:
dim lstResult = DB.MyTable.Where(function(f) f.key = new Guid(request.querystring("param"))).Select(function(f) new With { .guid = f.guid,.name = f.name }).toList()
抛出的异常是:
Only parameterless constructors and initializers are supported in LINQ to Entities
我可以(或应该)做的是预先声明Guid参数(这可能是一个好习惯),而不是在查询中使用它.它会工作:
dim myGuid = Guid.parse(request.querystring("param")) dim lstResult = DB.MyTable.Where(function(f) f.key = myGuid).Select(function(f) new With { .guid = f.guid,.name = f.name }).toList()
所以,我的问题是:为什么它会在没有创建匿名类型的情况下工作?为什么在尝试创建匿名类型时会引发异常?导致此异常的机制是什么?
解决方法
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。