ram*_*_rp 1 c# linq lambda ef-code-first
此代码导致NotSupportedException.
var detailList = context.Details.Where(x => x.GetType().GetProperty("Code").GetValue(x,null).ToString() == "00101").ToList();
Run Code Online (Sandbox Code Playgroud)
但是这段代码可行.
var detailList = context.Details.AsEnumerable().Where(x => x.GetType().GetProperty("Code").GetValue(x,null).ToString() == "00101").ToList();
Run Code Online (Sandbox Code Playgroud)
MSDN说:
- AsEnumerable()返回输入为IEnumerable的输入
那么为什么我们需要使用AsEnumerable()方法呢?
DbSet也是IQueryable.
IQueryable 有自己的一组LINQ扩展方法,可以将表达式树转换为SQL,并且不支持反射.
通过调用AsEnumerable(),可以将表达式的编译时类型更改为IEnumerable<T>,从而强制扩展方法绑定到标准LINQ方法.
如果您更喜欢在服务器上运行查询,则应构建表达式树而不是使用反射.