以下に示すように6つのテーブルがあります。 Application_name
、Environment_name
、およびStatus
に基づいてデータを取得しようとしています。Entity Frameworkコアラムダ式は4つのテーブルとフィルタを結合します。
ステータステーブル:
Id, Name
アプリケーションテーブル:
Id, Name
サーバーテーブル:
Id, ServerName, Status
Id, Name
ResourceGroupテーブル:
Id, Name, Application_Id, Environment_Id
ServersResourceGroup:
Id, Server_Id, Resource_Id
私がやろうとしていますどのようなすべての必要とテーブルと使用に参加している表はの環境データをフィルタリングする場所ここ、Environment_name
、およびStatus
はApplication_name
をフィルタリングすることにより、バック、すべてのデータを返しませんが、私は何の道の近くにEnvironment_name
とStatus
によって追加のフィルタを追加することにより、要件を超える満たすためにしていた、私が建てられ、私のクエリです:(
そこで、以下ここでApplication_name
public IEnumerable<ResourceGroup> GetAllServersByApplication(string application_name, string environment_name, string status)
{
var query = _context.ResourceGroup
.Include(a => a.Application)
.Include(t => t.Type)
.Include(e => e.ServersGroup).ThenInclude(e => e.Environment)
.Include(s => s.ServersGroup).ThenInclude(s => s.Server)
.Include(s => s.ServersGroup).ThenInclude(s => s.Server).ThenInclude(s => s.Status)
.Where(a => a.Application.Name == application_name)
.ToList();
return query;
}
ですべてのデータを返すクエリは、私はそれがすべての3つのフィルタに基づいてフィルタリングします記述しようとしていますクエリです:
public IEnumerable<ResourceGroup> GetAllServersByApplication(string application_name, string environment_name, string status)
{
var query = _context.ResourceGroup
.Include(a => a.Application)
.Include(t => t.Type)
.Include(e => e.ServersGroup).ThenInclude(e => e.Environment)
.Include(s => s.ServersGroup).ThenInclude(s => s.Server)
.Include(s => s.ServersGroup).ThenInclude(s => s.Server).ThenInclude(s => s.Status)
.Where(a => a.Application.Name == application_name)
.Select(e => e.ServersGroup.Where(s => s.Environment.Name == environment_name && s.Server.Status.Name == status)
.ToList();
return query;
}
return query
の下に赤い線が表示されます。下の画像を参照してください:
私は何をしようとしているラムダクエリを書くための簡単な方法はありますか?
本当にありがとうございます。あなたが今、あなたのメソッドシグネチャでは異なっているServersGroup
のコレクションを返しているので、:)
おかげで、
レイ
ちょっとしたアドバイス:「選択」しない場合は、すべてにInclude()を使用する必要はありません。つまり、アプリケーションでデータを必要とせず、それを含まない場合です。 'Where'はインクルードなしで正常に動作します。 –
あなたのお問い合わせの問題点を教えてください。 – Sampath
@Sampath - 私は自分の質問を更新しました。 – Ray