提高linq查询的性能

时间:2015-06-23 13:41:43

标签: vb.net linq

我们有一个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

2 个答案:

答案 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
相关问题