Linq 加入查看而不具体化,直到过滤
Posted
技术标签:
【中文标题】Linq 加入查看而不具体化,直到过滤【英文标题】:Linq Join To View Without Materializing Until Filtered 【发布时间】:2014-05-09 20:48:02 【问题描述】:所以我正在使用 EF,并且我的数据库中有一个视图,其中有太多的记录无法在我的 C# 程序中放入内存。在运行时,我可以获得一个 ID 列表,我希望通过这些 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 来做到这一点。
【问题讨论】:
可以在 linq 中添加where
语句。你想过滤什么?
【参考方案1】:
如果您的 ID 列表大小合理,您可以使用 where,EF 将“包含”翻译为:
ID 在哪里 (1,2,3,4....)
var ids = new List<int> 1, 2, 3, 4 ;
for v in view
where ids.Contains(v.ID)
select v
【讨论】:
以上是关于Linq 加入查看而不具体化,直到过滤的主要内容,如果未能解决你的问题,请参考以下文章
通过使用 LINQ 和 MVVM 过滤两个相同类型的 ObservableCollection 创建一个 ObservableCollection