我的任务是将筛选机制添加到结果集中。我理解使用Linq中的Where子句进行过滤的基本概念,但是这有一个更好的方法来做到这一点,对吧?使用Linq查询进行VB.NET筛选
场景: 我在结果集上有5个可过滤的列。我必须在任何时候考虑这5个滤波器的所有变化。这意味着我必须手动输入一个具有120种不同变体的If/ElseIf语句!
下面是事情进展的一般方法,我只是简单地问:有没有更好,更快的方法来做到这一点?
的过滤器
ByVal SearchMxMID As Integer,
ByVal SearchProfile As Integer,
ByVal SearchCZ As String,
ByVal SearchTerm As Integer,
ByVal SearchFwMth As Integer
的If语句的过程
If SearchMxMID = 0
And SearchProfile = 0
And SearchCZ = "All"
And SearchTerm = 0
And SearchFwMth = 0 Then
Dim queryMM = (From a In DBPricingContext.tbl_Matrix_Margins
Where a.CompanyID = CInt(sCompanyID)
Order By a.Profile
Select a)
Return New StoreResult(queryMM)
ElseIf SearchMxMID > 0
And SearchProfile = 0
And SearchCZ = "All"
And SearchTerm = 0
And SearchFwMth = 0 Then
Dim queryMM = (From a In DBPricingContext.tbl_Matrix_Margins
Where a.CompanyID = CInt(sCompanyID) And a.MarGroupID = SearchMxMID
Order By a.Profile
Select a)
Return New StoreResult(queryMM)
ETC ETC ETC
120总次数为这5个过滤器的每个组合(无论它们是否是空白或有价值)。有没有更快的方法,我可以做到这一点,可能在一个单一的Linq查询?
If SearchMxMID > 0 Then a.MarGroupID = SearchMxMID Else DO NOT APPLY WHERE CLAUSE
???
**场景:我的结果集上有5个可筛选的列。我必须在任何时候考虑这5个滤波器的所有变化。这意味着我必须用120种不同的变体手动输入一个If/ElseIf语句!**不,你不知道。只使用相关的东西 - 是的,你的where块有五个IF语句,但你只需要插入值。我一直在SQL中这样做,所以它应该也可以在Linq中使用。我在SQL中使用IN,在Linq中有类似的功能。 – Tim