0

Where="((ProgModelID == @ProgModelID) || (@ProgModelID == @ShowAll)) && (((FirstName + ' ' + MiddleName + ' ' + LastName) LIKE '%' + @Name + '%') || ((FirstName + ' ' + LastName) LIKE '%' + @Name + '%'))"

在与 a 进行比较时,我需要将全名连接在一起TextBox以过滤 a GridView,但是当我尝试运行它时会出现此错误。当Expression expected我将[]每个FirstName,MiddleNameLastName.

更新

我有一个文本框,用户可以在其中输入名称来过滤 aGridView的结果。有GridView一个LinqDataSource。问题是名称在数据库中分为 3 个部分:first、middle、last。我希望能够按名字+姓氏以及名字+中间名+姓氏进行过滤。如果删除了与 ProgModel 相关的部分,则与 ProgModel 相关的区域用于DropDownList并且已经起作用@Name

4

2 回答 2

1

我想出了如何避免这个错误,以及它的可能原因。我在视图中添加了计算列,LinqDataSource 从 FullName(first、middle、last)和 Name(first、last)中提取行。

然后我改为LIKE.Contains()收到一个no applicable method 'contains' exists in type 'string'错误。发生的事情是我忘记为 TextBox 添加ConvertEmptyStringToNull="false"(我从这里ControlParameter的链接中找到了这个解决方案)。这设法解决了一切。

于 2013-07-15T20:44:13.277 回答
0

最后你只需要一个)..这将在你完成后完成包装&&

尝试这个:

Where="((ProgModelID == @ProgModelID) || (@ProgModelID == @ShowAll)) && 
(((FirstName + ' ' + MiddleName + ' ' + LastName) LIKE '%' + @Name + '%') 
|| ((FirstName + ' ' + LastName) LIKE '%' + @Name + '%')))"

或者 - 为了使它更容易阅读并仍然获得相同的结果,请删除(之前的一个FirstName + ' '- 例如:

Where="((ProgModelID == @ProgModelID) || (@ProgModelID == @ShowAll)) && 
((FirstName + ' ' + MiddleName + ' ' + LastName) LIKE '%' + @Name + '%') 
|| ((FirstName + ' ' + LastName) LIKE '%' + @Name + '%'))"

最终,错误消息说明了一切:)

于 2013-07-15T19:33:44.717 回答