8

linqWhere句で使用する式を生成する関数があります。

public static Expression<Func<T,bool>> GetWhereCondition<T>() where T : IActive
{
    return x => x.Active;
}

(IActiveはプロパティ'Active'のみを定義することに注意してください)

他にも関連する機能があり、ビジネスルールなどを制御するために必要な条件をジェネリッククラスに注入できるという考えです。

問題は、これを実行すると、返される式に(デバッガーから見た)lamdaが含まれていることです。

x => Convert(x).Active

もちろん、これはlinqによって拒否されます。「LINQto Entitiesは、エンティティデータモデルのプリミティブ型のキャストのみをサポートします。」

だから私の質問は...

この動作を防ぐにはどうすればよいですか。変換の必要はなく、明らかにそれは望ましくありません。これを防ぐことさえ可能ですか?

4

2 に答える 2

10

これがクラスでのみ機能する必要があると仮定すると(変換はボクシングの値型用です)、class制約を追加できます。

public static Expression<Func<T, bool>> GetWhereCondition<T>() where T : class, IActive
{
    return x => x.Active;
}

...そして変換はなくなります。

于 2013-02-01T16:17:28.610 に答える
2

これを試して:

public static Expression<Func<T, bool>> GetWhereCondition<T>() where T : IActive
{
    return x => x.Active;
}
于 2013-02-01T16:07:08.603 に答える