我正在尝试将此测试代码转换为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
答案 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功能是相同的。
答案 2 :(得分:0)
切换到C#时我也遇到过这种情况。智能感知在C#中更糟糕:<
确保您在修剪后不会遗漏()
。