局部序列不能用于LINQ to SQL查询操作符的实现,除了Contains()操作符
本文关键字:操作符 实现 Contains 除了 查询 不能 用于 LINQ SQL to 局部 | 更新日期: 2023-09-27 18:14:50
我在我的项目中使用LINQ,我的代码是:
var SE = from c in Shop.Sections
join c1 in obj.SectionObjects on c.SectionId equals c1.SectionId
select c;
dataGridView1.DataSource = SE;
但是我在dataGridView1.DataSource = SE;
中遇到了这个错误错误信息是:
局部序列不能用于LINQ to SQL查询操作符的实现,除了Contains()操作符。
不能在SQL源和本地源之间使用Join。在连接SQL数据之前,需要将SQL数据放入内存。在这种情况下,你并没有真正做一个连接,因为你只从第一个集合中获取元素,你想要的是一个select…在查询中选择,您可以使用Contains方法获得。
var SE = Shop.Sections.Where( s => obj.SectionObjects
.Select( so => so.SectionId )
.Contains( s.SectionId ))
.ToList();
翻译
select * from Sections where sectionId in (...)
不能将本地源连接到SQL源,但是你可以将SQL源连接到本地,v.v。
var SE = from c1 in obj.SectionObjects
join c in Shop.Sections on c1.SectionId equals c.SectionId
select c;
换句话说,本地源必须放在第一位
这应该在数据库端完成(使用IN
),而不是在内存中:
var SE = from c in Shop.Sections
where obj.SectionObjects.Select(z => z.SectionId).Contains(c.SectionId)
select c;
L2S Profiler对于这些事情非常有帮助-您可以比较我的解决方案和其他解决方案生成的不同SQL。
var SE = from c in Shop.Sections.AsEnumerable().ToList()在c.SectionId等于c1时,将c1加入obj.SectionObjects.AsEnumerable(). tolist()中。SectionId选择c;
dataGridView1。数据源= SE;