にエラーがスローさ、のはそれだけで2つのプロパティを持っているとしましょう:ジェネリッククラスは、私は<code>ILogging</code>を実装し、いくつかのエンティティ<code>Logging</code>を持ってLINQのツーエンティティ
public partial class Logging : ILogging
{
public int ID {get; set;}
public string Name {get; set;}
}
public interface ILogging { int ID {get; set;} }
私はもともと静的含まれている静的クラスLogging.Q
を持っていたExpression<Func<Logging,bool>>
フィールドが、今私は、彼らが唯一のID
が必要な場合ILogging
のための式を書くことができるようにしたい:
public partial class Logging
{
public static Q<T> where T : ILogging
{
public static Expression<Func<T,bool>> IDOne = l => l.ID == 1;
}
}
私はこのような表現を呼び出すとき:
var log = ctx.Logging.Where(Logging.Q<Logging>.IDOne).FirstOrDefault();
私は、悪名高い "エンティティへのLINQのみサポートしています..." を取得:
'Entities.ILogging' を入力するタイプ 'Entities.Logging' をキャストすることができません。エンティティへのLINQは、EDMプリミティブまたは列挙型のキャストのみをサポートします。
しかし、なぜわからないのですか。私はクラスQ
にジェネリック型を定義していますので、ランタイムはLogging
で、ILogging
では扱わないことがわかります。これを回避する方法はありますか?
で
where T : class, ILogging
結果ここに – TYY@TYYで編集しました –
これがあなたの問題を解決するかどうかは分かりませんが、ある時点では制約にクラスを追加する必要があります。だから私はどこにTクラス、ILogging – TYY