ASP.NET Linq数据源 - 在其中使用enum参数

时间:2011-03-17 04:37:22

标签: asp.net linq-to-sql

我有一个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是我的输入类型。我似乎无法将一个转换为另一个......

2 个答案:

答案 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
}