Источник данных ASP.NET Linq - использование enum в параметрах where - PullRequest
2 голосов
/ 17 марта 2011

У меня есть 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 ]

2 голосов
/ 17 марта 2011

Я нашел ответ - в предложении where

Where="Int32(Type) == Convert.ToInt32(@Type)"

Это на самом деле похожая проблема, которая может и не может быть сделана внутри предложения linq where, и связана с преобразованием linq в sql,Мы не можем напрямую конвертировать enum в строку или string в enum, поэтому конвертируем оба в int.Сложной частью здесь является понимание того, что вам нужно выполнить Int32 (Type) в linq, где предложение и (int) Type не работают

1 голос
/ 17 марта 2011

на что похож твой enum? Попробуйте добавить

[StringValue("stringValue")] декоратор для каждого из ваших значений enum

public enum ProductType
{
    [StringValue("1")]
    Type1 = 1,
    [StringValue("2")]
    Type2 = 2,
    [StringValue("3")]
    Type3 = 3
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...