ナビゲーションプロパティSettings
と読み取り専用プロパティIsVisibleInApp
を持つUser
クラスがあります。エンティティフレームワークコアLINQクラスプロパティ/メソッドは使用できません含まれているプロパティ
var users = context.Users.Include(x => x.Settings)
.Where(x => x.Settings.IsApproved && x.Settings.IsAvailable && x.UserType == 2);
しかし、私は頻繁にこれらのチェックを使用する必要がありますので、私はプロパティを使用しようと、それは、実行時にNULLとしてSettings
を取得します。
現時点では、このコードは動作します。
ここに私のコードです。
public bool IsVisibleInApp
{
get
{
return this.Settings.IsApproved && this.Settings.IsAvailable && this.UserType == 2;
}
}
...
...
void SomeMethod(){
var users = context.Users.Include(x => x.Settings)
.Where(x => x.IsVisibleInApp).ToList();
外部キーthis.SettingsID
が有効な値であることがわかります。私はプロパティ/メソッドWhere
節で使用することはできませんDBSets
のSQLに変換されると思いますか? しかし、確かにこれを回避する方法があります...または、.ToList()
を最初に実行してから、さらに.Where
コールを使用する必要がありますが、それはデータベースからすべての行を取り出すことを意味します。 。
私はあなたがあなた自身の質問に答えだと思います。なぜあなたのデータベースはC#コードを強調していないのですか、それともLINQがC#コードをランダムにSQLに変換しようとしますか?元のラムダは変換できますが、プロパティのゲッターは変換できません。それがうまくいけば、次にそのゲッターの別のデータベースにサービスコールやI/Oを組み込み、それでもあなたのDBサーバー上ですべてが実行されることを期待していますか? – oerkelens