指定的 LINQ 表达式包含对与不同上下文关联的查询的引用。
2013-11-08 16:21
453 查看
var itemsNextIDs = itemInChannelRepository.Filter(i => i.ProductID > id ).Select(i => i.ProductID).ToList(); var productNext = from p in productRepository.Filter(p => p.ID > id ) join i in itemsNextIDs on p.ID equals i orderby p.ID select p; Model.Product product2 = productPre.FirstOrDefault();
上面的写法可以完成查询
============================================================================================================================ok
我本来是这样写的:(会报错:“...... 指定的 LINQ 表达式包含对与不同上下文关联的查询的引用。”)
var productNext = from p in productRepository.Filter(p => p.ID > id ) join i in itemInChannelRepository.Filter(i => i.ProductID > id ) on p.ID equals i.ProductID orderby p.ID select p; Model.Product product2 = productPre.FirstOrDefault()
上面的查询需要访问两个上下文。解决方法是分两次查询。
============================================================================================================================error
var itemsNext = itemInChannelRepository.Filter(i => i.ProductID > id ); var productNext = from p in productRepository.Filter(p => p.ID > id ) join i in itemsNext on p.ID equals i.ProductID orderby p.ID select p; Model.Product product2 = productPre.FirstOrDefault();
像上面这样写又会出问题:(会报错:“...... 此上下文仅支持基元类型(“例如 Int32、String 和 Guid”)。”)
报错的原因是在涉及到内存中的对象与EF里的对象混合查询时,内存中的对象要是基元类型。
============================================================================================================================error
var itemsNextIDs = itemInChannelRepository.Filter(i => i.ProductID > id ).Select(i => i.ProductID); var productNext = from p in productRepository.Filter(p => p.ID > id ) join i in itemsNextIDs on p.ID equals i orderby p.ID select p; Model.Product product2 = productPre.FirstOrDefault();
像上面这样写又会出问题:(会报错:“...... 指定的 LINQ 表达式包含对与不同上下文关联的查询的引用。”)
第一次查询实际上会因为EF的延时加载,不会立即将数据查询到内存中。
解决方法是对第一次查询使用ToList()
============================================================================================================================error
所以最终结果是:
var itemsNextIDs = itemInChannelRepository.Filter(i => i.ProductID > id ).Select(i => i.ProductID).ToList(); var productNext = from p in productRepository.Filter(p => p.ID > id ) join i in itemsNextIDs on p.ID equals i orderby p.ID select p; Model.Product product2 = productPre.FirstOrDefault();
============================================================================================================================ok
参考文章:http://blog.csdn.net/zzuqqiu/article/details/7185107
http://bbs.csdn.net/topics/390448261?page=1#post-394395668
相关文章推荐
- 指定的 LINQ 表达式包含对与不同上下文关联的查询的引用。
- 指定的 LINQ 表达式包含对与不同上下文关联的查询的引用。 int转换枚举不成功
- 指定的 LINQ 表达式包含对与不同上下文关联的查询的引用
- 指定的 LINQ 表达式包孕对与不同上下文关联的查询的引用
- Linq从两个edmx(两个数据库)中选取数据进行查找出现错误解决 (指定的 LINQ 表达式包含对与不同上下文关联的查询)
- linq 多表查询出现‘查询包含对不同数据上下文上所定义项的引用。’
- LINQ:查询包含对不同数据上下文上所定义项的引用
- 将不确定变为确定~LINQ查询包含对不同数据上下文上所定义项的引用
- System.InvalidOperationException: 查询包含对不同数据上下文上所定义项的引用
- 查询包含对不同数据上下文上所定义项的引用。
- 查询指定表全部字段信息,包含主键,计算列表达式等
- 学习笔记二--如何:查询包含一组指定单词的句子 (LINQ)
- C# 温故知新 基础篇(15) 使用LINQ查询表达式<思维导图>
- SQL Server分组查询某最大值的整条数据(包含linq写法)
- 1.4.1 LINQ 查询表达式和进程内查询
- Effective STL 为包含指针的关联容器指定比较类型
- wcf ria 解决linq表达式拼接动态查询的类PredicateBuilder
- 除非另外还指定了 TOP 或 FOR XML,否则,ORDER BY 子句在视图、内联函数、派生表、子查询和公用表表达式中无效
- LINQ查询表达式(5) - LINQ Null值处理&异常处理
- LinQ.1 查询表达式