c# – 为什么LINQ to Entities不识别某些方法?

c# – 为什么LINQ to Entities不识别某些方法?,第1张

概述为什么我不能这样做: usuariosEntities usersDB = new usuariosEntities(); foreach (DataGridViewRow user in dgvUsuarios.Rows){ var rowtoupdate = usersDB.usuarios.Where( u => u.codigo_usuar 为什么我不能这样做:
usuariosEntitIEs usersDB = new usuariosEntitIEs();      foreach (DataGrIDVIEwRow user in dgvUsuarios.Rows){   var rowtoupdate =        usersDB.usuarios.Where(       u => u.codigo_usuario == Convert.ToInt32(user.Cells[0].Value)       ).First();   rowtoupdate.password = user.Cells[3].Value.ToString();}usersDB.SaveChanges();

并且必须这样做:

usuariosEntitIEs usersDB = new usuariosEntitIEs();      foreach (DataGrIDVIEwRow user in dgvUsuarios.Rows){   int usercode = Convert.ToInt32(user.Cells[0].Value);   var rowtoupdate =        usersDB.usuarios.Where(u => u.codigo_usuario == usercode).First();   rowtoupdate.password = user.Cells[3].Value.ToString();}usersDB.SaveChanges();

我必须承认它是一个更易读的代码,但为什么不能这样做呢?

解决方法 关于它的事情是liNQ查询由编译器转换为表达式树.然后将此表达式树转换为T-sql并传递给服务器. liNQ to sql将某些方法(如String.Contains)映射到T-sql等效项.

在第一个示例中,liNQ显然不会将Convert.ToInt32映射到任何内容并抛出异常.它在第二个示例中工作的原因是因为Convert.ToInt32调用是在查询之外完成的,因此它不是表达式树的一部分,不需要转换为T-sql.

This MSDN page描述了liNQ to sql如何将各种数据类型,运算符和方法转换为T-sql. (虽然文档确实建议支持Convert.ToInt32,所以我不确定这里还会发生什么.)

对不起刚刚意识到这是ADO.NET实体框架,而不是liNQ to sql. This page lists ADO.NET实体框架映射.它有点限制性,主要是因为它需要与多个提供商合作.

总结

以上是内存溢出为你收集整理的c# – 为什么LINQ to Entities不识别某些方法?全部内容,希望文章能够帮你解决c# – 为什么LINQ to Entities不识别某些方法?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1249686.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存