我有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
谢谢
答案 0 :(得分:1)
听起来您正在寻找实施动态查询。虽然LINQ为您提供了良好的类型安全,编译时检查,但是当您需要动态构建查询时,它可能会有点混乱。
看看Scott Gu关于动态LINQ查询的文章:
答案 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更难。