gpt4 book ai didi

vb.net - 直接使用函数和作为 lambda 表达式使用函数

转载 作者:行者123 更新时间:2023-12-04 23:58:43 25 4
gpt4 key购买 nike

有没有更好的方法来实现这个?我是否应该关注此处 Compile 方法的性能?

     Public Overrides Function GetValidSerialNumbers() As System.Collections.Generic.IEnumerable(Of SerialNumber)
Return Queryable.Where(allSerials, SerialNumberValidFunc)
End Function

Public Overrides Function IsSerialNumberValid(serialNumber As SerialNumber) As Boolean
Return (SerialNumberValidFunc.Compile().Invoke(serialNumber))
End Function

Private ReadOnly Property SerialNumberValidFunc As Expressions.Expression(Of Func(Of SerialNumber, Boolean))
Get
If ProductionReceiptLine.MOOutput Is Nothing Then
Return Function(sn As SerialNumber) sn.ItemInventory Is Nothing AndAlso _
(sn.Status = SerialNumberStatusValues.Planned AndAlso sn.MO Is ProductionReceiptLine.ProductionReceipt.MO _
OrElse sn.Status = SerialNumberStatusValues.Assigned)
Else
Return Function(sn As SerialNumber) sn.ItemInventory Is Nothing AndAlso _
(sn.Status = SerialNumberStatusValues.Planned AndAlso sn.MO Is Nothing OrElse sn.Status = SerialNumberStatusValues.Assigned)
End If
End Get
End Property

我想要 lambda 表达式的原因是因为我希望该函数能够一直通过 LINQ-to-SQL 转换为 SQL。我想要直接版本的原因是因为我有其他代码,我想在提交更改之前验证各个序列号。我担心 GetValidSerialNumbers.Contains(serialNumber) 会执行一个比必要的更复杂的查询。

最佳答案

Compile 方法非常慢,因为它需要从您的表达式中发出 IL。调用已编译的函数将导致另一个编译:JIT 编译。

我建议您将 Compile 的结果缓存在静态字段中。

您采用的总体方法很好。它是干的。

关于vb.net - 直接使用函数和作为 lambda 表达式使用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10301811/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com