')'或运算符在LinqDataSource where子句上的预期

时间:2013-07-15 19:27:30

标签: asp.net where linqdatasource

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

我需要在与TextBox进行比较时将全名连接在一起才能过滤GridView,但是当我尝试运行它时会出现此错误。当我在Expression expected[]FirstName周围放置MiddleName时,错误会更改为LastName

更新

我有一个文本框,用户可以输入名称来过滤GridView的结果。 GridView有一个LinqDataSource。问题是名称在数据库中分为3部分:第一部分,中间部分,最后部分。我希望能够按第一个+姓氏过滤,以及第一个+中间+姓氏。与ProgModel相关的区域适用于DropDownList,如果删除了与@Name相关的部分,则该功能已经发挥作用。

2 个答案:

答案 0 :(得分:1)

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

然后我将LIKE更改为.Contains()并收到no applicable method 'contains' exists in type 'string'错误。发生了什么事我忘了将ConvertEmptyStringToNull="false"添加到TextBox的ControlParameter(我从链接here找到了这个解决方案)。这设法解决了所有问题。

答案 1 :(得分: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 + '%'))"

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