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
相关的部分,则该功能已经发挥作用。
答案 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 + '%'))"
最终错误消息说明了一切:)