LINQ查询搜索条件

时间:2012-09-04 13:31:17

标签: asp.net vb.net linq linq-to-entities

我有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  

谢谢

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

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

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