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 は優れたタイプ セーフなコンパイル時チェック機能を提供しますが、その場でクエリを作成する必要がある場合は少し面倒です。

動的 LINQ クエリに関する Scott Gu の記事をご覧ください。

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 も参照してください。これにより、string concat を使用して where 句を構築できます。それらは引き続きパラメーター化され、動的 SQL よりも SQL インジェクションを実行するのが難しくなります。

于 2012-09-04T18:01:01.367 に答える