我有一个linqdatasource,我想使用类型的枚举如下:
<asp:linqdatasource id="GridDataSource" runat="server" enabledelete="true" Where="Type == @Type">
<whereparameters>
<asp:dynamiccontrolparameter controlid="FilterRepeater" />
<asp:QueryStringParameter QueryStringField="Type" Name="Type" ConvertEmptyStringToNull="false" />
</whereparameters>
</asp:linqdatasource>
它不断抛出错误:
Operator '==' incompatible with operand types 'ProductType' and 'String'
ProductType是我的Enum,String是我的输入类型。我似乎无法将一个转换为另一个......
答案 0 :(得分:2)
我找到了答案 - 在where子句中
Where="Int32(Type) == Convert.ToInt32(@Type)"
这实际上是一个类似的问题,在linq where子句中可以做什么和不能做什么,并且与linq转换为sql有关。我们不能直接将枚举转换为字符串或字符串转换为枚举,因此将两者都转换为int。这里的困难部分是意识到你需要做Int32(Type) 在linq where子句和(int)类型不起作用
答案 1 :(得分:1)
你的枚举是什么样的?尝试添加
每个枚举值的 [StringValue("stringValue")]
装饰器
public enum ProductType
{
[StringValue("1")]
Type1 = 1,
[StringValue("2")]
Type2 = 2,
[StringValue("3")]
Type3 = 3
}