私は私のBLLエンティティに私のEFエンティティから再利用可能なマッピング式を作成していますから、式
private Expression<Func<Person, bool>> GetNameFilter(string name)
{
return person => person.Profile.UserName == name;
}
internal Expression<Func<Ef.Perk, Bll.Perk>> MapPerkPerk(string name)
{
return perk => new Bll.Perk
{
Id = perk.PerkId,
Name = perk.PerkName,
Description = perk.PerkDescription,
//Compilation Error
Owned = perk.Players.Any(GetNameFilter(name))
};
}
そして、私は指摘でコンパイルエラーを取得していますライン。エラーが読み:
タイプの受信機が必要ですいるICollectionは「どれ」と最高の拡張メソッドのオーバーロード「Queryable.Any(のIQueryable、式>)」の定義が含まれていません「のIQueryable」
しかし、私は直接にこの表現を押すと、この現象が発生しません:
internal Expression<Func<Ef.Perk, Bll.Perk>> MapPerkPerk(string name)
{
return perk => new Bll.Perk
{
Id = perk.PerkId,
Name = perk.PerkName,
Description = perk.PerkDescription,
//No Compilation Error
Owned = perk.Players.Any(person => person.Profile.UserName == name)
};
}
ですが、なぜでしょうか?両方の式の型は同じです。 LinqExpressionソリューションを使用して
は私は今、実行時に次のエラーを取得しています、以下のが見つかりました:型「System.InvalidCastExceptionの」の例外がLinqKit.dllで発生した
が、ユーザーコードで処理されなかった
追加情報:タイプ 'System.Linq.Expressions.InstanceMethodCallExpressionN'のオブジェクトを「System.Linq.Expressions.LambdaExpression」と入力することができません。
internal FutureQuery<Perk> GetPlayerInfoPerks(string username)
{
return Master
.Perks
.VisiblePerks
.Select(Master.Perks.MapPerkPerk(username))
.Future();
}
これはEntityFramework.Futureライブラリを使用するためですか?
、あなたのクラスに'? – Masoud
サードパーティのパッケージを使用することはできますか? –
私はSystem.Linqを使用しています。私は第三者を使わない方が好きですが、DRYに従うことができるのであれば、私は彼らに反対しません。 – jokulmorder