动态在Linq查询中获取所有结果或限制为1的位置

时间:2015-01-21 14:54:43

标签: vb.net linq

我有一个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查询,但我无法使其正常运行。

3 个答案:

答案 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