LINQ to SQL 错误:本地序列使用限制
在 LINQ to SQL 中,查询运算符不能使用除 Contains() 之外的本地序列操作员。当尝试在 SQL 源和本地源之间执行联接时,通常会出现此错误。
提供的代码片段演示了 Shop.Sections 表与本地集合 obj.SectionObjects 之间的联接。但是,此操作无效,导致错误:“本地序列不能在 LINQ to SQL 查询运算符实现中使用,除了 Contains() 运算符。”
解决方案:Data Retrieval Before Join
要解决此错误,请在尝试连接之前将 SQL 数据检索到内存中。在这种情况下,我们不执行真正的联接,而是执行“select...where...selectid in”查询。这可以使用 Contains() 方法来实现:
var SE = Shop.Sections .Where(s => obj.SectionObjects .Select(so => so.SectionId) .Contains(s.SectionId)) .ToList();
此查询转换为:
select * from Sections where sectionId in (...)
其中 in 子句中的 ID 列表源自本地对象集合。此方法可确保查询中使用的所有数据都是 SQL 源的一部分,从而解决了错误。
以上是为什么 LINQ to SQL 在加入本地集合时会抛出'本地序列使用限制”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!