gpt4 book ai didi

LINQ 到对象 : Query with multiple LIKE conditions (OR or AND) possible?

转载 作者:行者123 更新时间:2023-12-05 00:09:32 27 4
gpt4 key购买 nike

我们有一个表单,允许用户通过在文本框中键入来过滤列表。我们需要根据两个字段过滤列表。 FundName 和 CompanyName。当表单加载时,我将初始 LINQ to SQL 结果放入一个列表中,以便对于每个后续操作(过滤器)都不会命中数据库。这显着加快了速度(从每个过滤器操作的大约 400 毫秒到不到 6 毫秒,例如键入一个字符)并减少数据库抖动。

问题是,当我们决定让过滤条件搜索两个字段时,LINQ to Object 查询不起作用。我可以 有一个具有多个条件的查询只是 不是 多个 LIKE(或 .Contains 或 .Endswith 等评估为 SQL LIKE 语句的方法)。该查询确实针对 LINQtoSQL 工作,而不是针对对象。下面是一些示例代码:

Dim db As New BenchmarkLINQtoSQLDataContext()

Dim fundList = From FundShort In db.FundShorts _
Select FundShort _
Order By FundShort.IRBB

Dim linqFundShortList As New List(Of FundShort)
linqFundShortList = fundList.ToList()

Dim filterText = "aka"


'This works
Dim successQuery = From fs In fundList _
Where fs.FundName.ToLower.Contains(filterText) _
Or fs.CompanyName.ToLower.Contains(filterText) _
Select fs

FundBindingSource.DataSource = successQuery

'This also works
Dim successQuery2 = From fs In linqFundShortList _
Where fs.FundName.ToLower.Contains(filterText) _
Select fs

FundBindingSource.DataSource = successQuery2

'This does not
Dim failQuery = From fs In linqFundShortList _
Where (fs.FundName.ToLower.Contains(filterText) _
Or fs.CompanyName.ToLower.Contains(filterText)) _
Select fs

FundBindingSource.DataSource = failQuery

异常(exception)是“未将对象引用设置到对象的实例”。 - 堆栈跟踪是:
   at Benchmark.BPRMS.FundsMain._Closure$__1._Lambda$__3(FundShort fs) in
C:\Projects\BPRMS\Trunk\BPRMS\Forms\FundsMain.vb:line 72
at System.Linq.Enumerable.WhereSelectListIterator`2.MoveNext()
at System.Linq.SystemCore_EnumerableDebugView`1.get_Items()

任何和所有的帮助和建议将不胜感激。

最佳答案

如果您收到 NullReferenceException,则听起来 FundName 或 CompanyName 为空(无)。尝试:

Dim failQuery = From fs In linqFundShortList _
Where (((Not fs.FundName Is Nothing) AndAlso fs.FundName.ToLower.Contains(Me.filterText))_
OrElse ((Not fs.CompanyName Is Nothing) AndAlso fs.CompanyName.ToLower.Contains(Me.filterText))) _
Select fs

(语法可能有点不对,但希望你能明白要点。)

关于LINQ 到对象 : Query with multiple LIKE conditions (OR or AND) possible?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/285087/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com