使用Linq和Trim.Text进行搜索

时间:2008-12-05 22:35:21

标签: c# linq

我正在尝试将此测试代码转换为C#并且在修剪命令时遇到问题。有没有人在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

3 个答案:

答案 0 :(得分:2)

您遇到的问题是什么? LINQ提供商是什么?内存集(LINQ到对象)?还是LINQ-to-SQL?或LINQ到实体?

怀疑你得到的一些关于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(etc)中使用复杂的操作,它,即使很明显答案每行都没有改变;即txtSearch.Text.Trim()每行不应更改,那么为什么每行评估一次呢?在查询之前对其进行评估,并且只进行一次。

答案 1 :(得分:0)

不确定你在问什么,但c#中的Trim功能是相同的。

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

答案 2 :(得分:0)

切换到C#时我也遇到过这种情况。智能感知在C#中更糟糕:<

确保您在修剪后不会遗漏()