【问题标题】:LINQ Query for search criteria搜索条件的 LINQ 查询
【发布时间】:2012-09-04 13:31:17
【问题描述】:

根据我想要获取结果的值,我有 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  

谢谢

【问题讨论】:

  • 任何人都可以帮助解决这个问题

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


【解决方案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

【讨论】:

    【解决方案2】:

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

    如果您使用的是 EF,我建议您使用 ObjectBuilder 方法或 EF 的 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 注入。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-09-12
      • 2015-01-19
      • 2017-12-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多