2

我正在将 Linq to Sql 与 Predicate Builder 一起使用,并试图优化从数据库中检索到的信息量。我想只选择某些字段以在网格视图中显示它们。当我只选择我想要的内容时,我添加的搜索参数(见下文)不起作用,PredicateBuilder 也不起作用。这就是我目前正在做的事情(有效,但得到的信息太多了)

    ' Initial Setup '
    Dim db As New MyDataContext()
    Dim results = From p In db.Products _
                  Select p

    ' Search '
    If (testCase) Then
        results = results.Where(Function(p) p.SomeAttribute = 123)
    End If

如果我将其更改为仅选择我需要的内容,如下所示:

    Dim results = From p In db.Products _
                  Select p.Name, p.SomethingElse

然后我注意到如果选择了信息(即我选择 p.SomeAttribute),那么我可以在该属性上搜索(添加 where 子句),但如果没有,我不能。并且使用谓词构建器,它仅在我选择整个项目(即选择 p)时才有效。所有这一切都应该做的是创建不必选择要搜索的属性的 SQL 语句。我怎样才能让它工作并只选择我需要的东西,但是搜索任何东西并保持prediate builder工作?非常感谢任何帮助!谢谢

4

3 回答 3

1

您不能使用谓词构建器(构建布尔表达式)修改“选择列表”(这就是我理解您的问题的方式。我可能误解了它)。您应该手动使用System.Linq.Expressions命名空间中的东西来做到这一点,但我建议改用动态 LINQ

于 2009-08-03T16:57:30.460 回答
1

您可以尝试在开头先执行“select p”,然后添加所有 where 子句,最后从其中选择您需要的内容。

' Initial Setup '
Dim db As New MyDataContext()
Dim results = From p In db.Products _
              Select p

' Search '
If (testCase) Then
    results = results.Where(Function(p) p.SomeAttribute = 123)
End If

' trim down the columns after you've added the wheres...
Dim results2 = from p in results
               Select p.Name, p.SomethingElse
于 2009-08-03T16:58:03.703 回答
0

听起来您正在投影中的位置而不是原始产品。在应用了所有搜索条件后,在最后选择 p.Name, p.SomethingElse 进行投影。

于 2009-08-03T16:58:09.133 回答