【问题标题】:Using Linq and the Trim.Text for Search使用 Linq 和 Trim.Text 进行搜索
【发布时间】:2008-12-05 22:35:20
【问题描述】:

我正在尝试将此测试代码转换为 C#,但 Trim 命令出现问题。有没有人在 C# 中做过类似的事情,将它与文本框一起使用来搜索 aspx 页面。

Dim q = From b In db.Blogs _
        Where b.BlogContents.Contains(txtSearch.Text.Trim()) Or _
              b.BlogTitle.Contains(txtSearch.Text.Trim()) _
        Select b

【问题讨论】:

    标签: c# linq


    【解决方案1】:

    您遇到了什么问题?这是什么 LINQ 提供程序?内存集(LINQ-to-Objects)?还是 LINQ-to-SQL?还是 LINQ-to-Entities?

    怀疑您得到了一些关于 db LINQ 提供者不知道 Trim() 的信息 - 在这种情况下,请先尝试进行修剪:

    string s = txtSearch.Text.Trim();
    var q = from b in db.Blogs
            where b.BlogContents.Contains(s) || b.BlogTitle.Contains(s)
            select b;
    

    这解决了两个三个不同的问题:

    1:捕获:原来是txtSearch被捕获到查询中,有复杂性;通过首先评估Trim,捕获的是s,这是一个简单的不可变字符串

    2:表达式复杂性:对于基于表达式的 LINQ(即到数据库),整个表达式(包括.Text.Trim 等)是表达式的一部分。如果 LINQ 提供程序不能识别其中的一个或多个,它将​​失败。通过首先将其简化为字符串,LINQ 提供程序需要处理的只是一个字符串,每个提供程序都应该可以处理。

    (添加) 3:重复计算:LINQ-to-Objects很字面化;如果您要求它在 Where(等)中使用复杂的操作,它,即使很明显每行的答案都没有变化;即txtSearch.Text.Trim() 不应该每行更改,那么为什么要每行评估它呢?在查询之前评估它,它只执行一次。

    【讨论】:

      【解决方案2】:

      不确定你在问什么,但是 c# 中的 Trim 函数是一样的。

      http://msdn.microsoft.com/en-us/library/t97s7bs3.aspx

      【讨论】:

        【解决方案3】:

        我在切换到 C# 时也遇到过这种情况。 C# 中的智能感知要差得多:

        确保在 Trim 之后没有遗漏()

        【讨论】:

          猜你喜欢
          • 2011-02-27
          • 2013-01-27
          • 1970-01-01
          • 2011-11-07
          • 1970-01-01
          • 1970-01-01
          • 2010-09-20
          • 2011-04-07
          相关资源
          最近更新 更多