所以我正在使用EF,我在我的数据库中有一个视图,它有太多的记录在我的C#程序中带入内存。在运行期间,我能够获得一个ID列表,我希望通过加载到IEnumerable来过滤视图。
现在我想只返回视图中具有IEnumerable中ID的记录。使用Linq我写道:
for v in view
join i in IDs on v.ID equals i.ID
select v
但是,这首先尝试实现视图,然后在内存中进行过滤,这太慢了。 Linq中有没有办法将过滤推送到数据库,以便在SQL Server中进行连接?
我知道我可以创建一个sproc并拥有一个带有ID的TVP,并使用ADO.NET使这一切都在数据库端发生,但我很好奇是否有办法用EF和Linq做到这一点。< / p>
答案 0 :(得分:1)
如果您的ID列表大小合适,您可以使用where,并且EF翻译&#34;包含&#34;到:
WHERE ID IN(1,2,3,4 ....)
var ids = new List<int> { 1, 2, 3, 4 };
for v in view
where ids.Contains(v.ID)
select v