Sey*_*avi 22 c# entity-framework
我的页面中有以下代码:
var myVar= Entity.SetName
.Where(p => int.Parse(p.ID) >= start &&
int.Parse(p.ID) <= end);
Run Code Online (Sandbox Code Playgroud)
start和end是int,但p.ID是string.所以我应该将p.ID转换为int.但我得到以下错误:
LINQ to Entities无法识别方法'Int32 Parse(System.String)'方法,并且此方法无法转换为存储表达式.
问题出在哪儿??
mip*_*e34 15
首先,我强烈建议检查您的数据库设计,是否有一个非常好的理由ID成为一个string.我会考虑将ID数据库类型更改为int,您将通过转换摆脱这个问题.
您获得的错误意味着EF不知道如何将方法转换Int32.Parse()为SQL.基本上你有两个选择如何处理:
在linq之外进行实体比较:
var myVar= Entity.SetName.AsEnumerable()
.Where(p => int.Parse(p.ID) >= start &&
int.Parse(p.ID) <= end);
Run Code Online (Sandbox Code Playgroud)
但不建议这样做,因为在应用where条件之前,您正在从DB读取整个结果集.
或者在SO上的这篇文章中描述自定义模型定义函数:
在EF 4.0 或 实体框架中将字符串转换为Int :我在哪里扩展CSDL/MSL?
小智 5
将解析函数移出linq表达式.
int id = int.Parse(p.ID);
var myVar= Entity.SetName
.Where(p => id >= start && int.Parse(p.ID) <= end);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
43161 次 |
| 最近记录: |