我有一个linq查询,可以获取我需要的数据。然后我使用For Each循环来处理它。
Dim PickCustomer as string = "Some Customer"
Dim CustQuery = From Cust In myCustTable _
Select CustomerID = Cust.CustomerID, _
CustName = Cust.Name, _
Order By CustomerID Ascending
For Each MyCust In CustQuery
Next
如何动态更改查询?如果PickCustomer =""然后我想要所有的结果。但是如果PickCustomer有一个名字(任何长度> 0),那么我想将我的linq查询限制为仅限该客户。与Where (CustName = PickCustomer)
我一直在查看动态Linq查询,但我无法使其正常运行。
答案 0 :(得分:1)
由于LINQ查询是惰性求值的,因此您可以分阶段进行构建,因此在这种情况下您不需要任何动态,只需If
。
e.g。像这样(未经测试):
Dim PickCustomer As String = ""
Dim CustQuery = From Cust In myCustTable
If Not String.IsNullOrWhiteSpace(PickCustomer) Then
CustQuery = From Cust In CustQuery
Where Cust.Name = PickCustomer
End If
CustQuery = From Cust In CustQuery
Select
CustomerID = Cust.CustomerID,
CustName = Cust.Name
Order By CustomerID Ascending
For Each MyCust In CustQuery
Next
答案 1 :(得分:1)
我认为你不需要动态的Linq。只需添加一个处理这两种情况的where子句。类似的东西:
Where String.IsNullOrEmpty(PickCustomer) or (CustName = PickCustomer)
答案 2 :(得分:0)
是的,我同意不需要为此使用动态LINQ。 您甚至可以在查询之外尝试逻辑,如下所示:
Dim MyCompany as string = "Consolidated Messenger"
Dim companies =
{"Consolidated Messenger", "Alpine Ski House", "Southridge Video", "City Power & Light",
"Coho Winery", "Wide World Importers", "Graphic Design Institute", "Adventure Works",
"Humongous Insurance", "Woodgrove Bank", "Margie's Travel", "Northwind Traders",
"Blue Yonder Airlines", "Trey Research", "The Phone Company",
"Wingtip Toys", "Lucerne Publishing", "Fourth Coffee"}
If MyCompany.length = 0 then
For Each company As String In companies
Console.WriteLine(company)
Next
Else
Dim CompanyResult =
From company In companies where String.IsNullOrEmpty(company) or company.ToLower() = MyCompany.ToLower() select company
For Each comp as String in CompanyResult
Console.WriteLine(comp)
Next
End If