0

我有 5-6 个文本框和下拉列表,基于我想要获取结果的值,使用 OR 条件,此查询工作正常,但是当我对多个条件使用 AND 时,由于显而易见的原因,它不会给我任何结果。现在我的问题是如何更改此查询以使其适用于 AND 和 OR 条件。

询问

Public Sub SerachCriteria()
    Debugger.Break()
    Dim s = New Ex1DataContext(SPContext.Current.Web.Url)
    Dim vendors = s.PurchaseOrderWrite
    Dim query = From vendor In vendors.ToList() _
                Where (Not ddsearchorderVendor.SelectedItem.Text = "--Select--" AndAlso vendor.Supplier.Title = ddsearchorderVendor.SelectedItem.Text) _
                Or (Not ddsearchorderStatus.SelectedItem.Text = "--Select--" AndAlso vendor.Status = ddsearchorderStatus.SelectedItem.Text) _
                Or (Not txtSearchOrder.Text Is Nothing AndAlso vendor.Purchaseorderno = txtSearchOrder.Text) _
                Or (Not ddsearchorderdate.Text = "--Select--" AndAlso vendor.Orderdate = ddsearchorderdate.Date) _
                Select vendor.Purchaseorderno
    For Each a In query
        listpurchaseorder.Items.Add(a)
        listpurchaseorder.DataTextField = "Purchaseorderno"
        listpurchaseorder.DataValueField = "ID"
        listpurchaseorder.DataBind()
    Next
    SerachCriteriaPartNo()
End Sub  

谢谢

4

2 回答 2

1

听起来您正在寻找实现动态查询。虽然 LINQ 为您提供了很好的类型安全的编译时检查,但当您需要动态构建查询时它可能会有点混乱。

看看 Scott Gu 关于动态 LINQ 查询的文章:

http://weblogs.asp.net/scottgu/archive/2008/01/07/dynamic-linq-part-1-using-the-linq-dynamic-query-library.aspx

于 2012-09-04T17:07:17.860 回答
0

对于 And,您可以使用一种策略,根据需要连接多个 where 子句。请参阅http://www.thinqlinq.com/Post.aspx/Title/Dynamically-extending-LINQ-queryies-without-building-expression-trees。或者更棘手,因为它们通常需要您的实现或动态表达式树创建。结合 And 和 Or 最好考虑使用带有 Linq to SQL 的动态查询库。

如果您使用的是 EF,我会推荐 EF 的 ObjectBuilder 方法或 EntitySQL。有关 ObjectQuery,请参阅http://thedatafarm.com/blog/data-access/querying-with-linq-to-entities-vs-objectquery-in-ef/ 。另请查看http://archive.msdn.microsoft.com/EFQuerySamples中的 BuilderMethodSamples 。有了这个,您可以使用字符串 concat 来构建您的 where 子句。它们仍然会被参数化,并且比动态 sql 更难进行 SQL 注入。

于 2012-09-04T18:01:01.367 回答