我们有一个linq查询,如下所示,首先显示项目应显示与文本匹配的记录,然后显示文本是否包含在字符串中。但是它会导致很多性能问题。任何人都可以帮助改进它。
Dim result1 = From entry As IAutoCompleteEntry In oldList
Where entry.ToString.ToUpper.Contains(Me.Text.ToUpper())
Order By entry.ToString.IndexOf(Me.Text.ToUpper()), entry.ToString.ToUpper.StartsWith(Me.Text.ToUpper())
Descending
Select entry
答案 0 :(得分:1)
你在几个地方调用ToUpper()。在进入此linq查询之前,是否可以让列表/数组具有ToUpper()? 我想在获得这个linq查询之前,你还可以有另一列entry.ToString.IndexOf(Me.Text.ToUpper()),entry.ToString.ToUpper.StartsWith(Me.Text.ToUpper())。 它可能会提高性能......
答案 1 :(得分:1)
首先,我不确定.StartWith的重要性。由于你已经获得了IndexOf,你已经知道了StartsWith的答案(它应该是0)。
接下来,你真的不应该使用ToUpper(如提到的@RobertMcKee),而应该使用不区分大小写的比较。在这种情况下,你不应该再需要.ToUpper了......
最后,我实际上会说使用包含你的第二个声明,但你可能甚至不需要它。您可以根据输入变量对降序进行排序。这是我写的更新的查询:
dim result1 = From entry As IAutoCompleteEntry In oldList
Where (entry.IndexOf(Me.Text, StringComparison.OrdinalIgnoreCase) <> -1)
Order By entry Descending
Select entry