【问题标题】:FindAll() in Linq Query ListLinq 查询列表中的 FindAll()
【发布时间】:2016-07-03 23:34:30
【问题描述】:

我有一个 Linq Query 被放入一个名为“ticket query”的列表中 我想搜索所有具有特定数据的记录的票查询

我尝试使用FindAll(),但它给了我一个错误

参数匹配参数“匹配”不能从 'VB$AnonymousDelegate_1(Of JobPartForm,Nullable(Of Boolean))' to '谓词(JobPartForm)'。

我不能直接在查询中执行 findall,因为它是在单独的时间调用的

还有其他方法可以做到这一点,还是我使用 find all wrong?

ticketquery = (From ticket In dbContext.JobPartForm
                       Select ticket).ToList()

Dim formticket = ticketquery.FindAll(Function(f As JobPartForm) f.JobNum = ticketnum And f.FormNumber = formnum)

【问题讨论】:

  • FindAll() 是如何实现的?请显示其完整来源。

标签: vb.net entity-framework linq linq-to-entities


【解决方案1】:

您也可以使用IQueryable<TSource>.Where 方法来做同样的事情:

Dim formticket=dbContext.JobPartForm.Where((Function(f As JobPartForm) f.JobNum = ticketnum And f.FormNumber = formnum)).ToList();

第一件事是尽量不要从DbSet 调用ToList 扩展方法,这会将您的整个表加载到内存中,当您可以在服务器端过滤数据时效率非常低。

【讨论】:

  • 问题是,这个方法被调用了很多,每次发回数据库都会变慢,
  • 好吧,事实是我不知道你的情况,但我认为加载不是一个好主意,例如,稍后在内存中过滤 100 000 条记录,但无论如何这取决于你 ;)。您还可以在ticketquery 列表中使用IEnumerable<TSource>.Where 扩展方法,该方法返回IEnumerable<TSource>。这种方法相对于FindAll 的优势在于Where 实现了延迟执行,在您需要之前它实际上不会对您的数据进行查找。
猜你喜欢
  • 1970-01-01
  • 2018-01-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-09
  • 1970-01-01
  • 1970-01-01
  • 2015-05-22
相关资源
最近更新 更多