C#で複数のテーブルから列を選択するには?

ジュヌパダワン:

私の問題は、私はこれに非常に新しいんだという事実から来ています。基本的に、私は一種のC#でrestapiをしようとのことだし、それは、現在、私のローカルホスト上のMySQL databseに接続されています。私は関係を持つ複数のテーブルがあり、テーブルのいずれかから、私はその関係がそのテーブル内の特定の文字列が含まれているテーブルからすべてのレコードを一覧表示します。

のは、私は複数の列、電池やエレベーターを持っている建物のテーブルがあるとしましょう。私はそれが「非アクティブ」のステータス、ステータスが列名であることとのいずれかの列、バッテリーやエレベーターを持っているすべての建物をリストしたいと思います。

私のコードは、現在、明らかに間違っしかし、次のようになります。

[HttpGet("intervention")]
public List<Buildings> Getintervention(string status)
{
    var myintervention = _context.buildings.Select(e => e.status == "Inactive").From(Batteries).ToList();
    return myintervention;
}

私は、このようなクエリを行うことができ、それが動作するという事実を知っています: var unavailable = _context.elevators.Where(e => e.status != "Active").ToList();

問題がある...私のビル・テーブルは任意の状態列を持っていないと、現在それが...それがステータス列が含まれていないことを言って私にエラーを返しますので、私はどのように行うのか分かりません。笑。

誰もが、私はこれを行うことができる方法のアイデアを持っている場合、私に知らせて!

ありがとうございました :)

キーズJard:

私は、これはEFまたはEFコアであり、および/またはあなたの関連データをロードする方法かどうかにクリアしていないよしかし建物コレクションが既に熱心にロードされているか、または暗黙のうちに電池/コラム/エレベーターをロードする場合、私はそれがこのように見えることを期待します:

context.Buildings.Where(b =>
  b.Batteries.Any(ba => ba.Status == "Inactive) ||
  b.Columns.Any(c => c.Status == "Inactive) ||
  b.Elevators.Any(c => c.Status == "Inactive)
);

ビルはこれらのコレクションをロードしない場合は/彼らはあなたのような何かをする必要がある場合があります明示的にロードされているcontext.Buildings.Include(b=>b.Batteries).Include(b=>b.Columns)...あなたの場所の前に。あなたは使用ではなく、別のクエリを実行すると、複数のデカルト爆発(1000行の原因となります10個のバッテリー、10列と10台のエレベーター付きの建物を引き起こす可能性が含まれているジョインEFコアの最近のバージョンで生成されることに留意し、EF必要があります)バックダウン31のエンティティにそれを沸騰させる結果セットを選択する必要があります

この建物を収集したり、そこからIDを構築し、個別にあなたのテーブルをヒットするよりパフォーマンスすることがあります。

context.Batteries(b=> b.Status == "Inactive").Select(ba => ba.Building);
context.Batteries(b=> b.Status == "Inactive").Select(ba => ba.BuildingID);

そして、その後、その後、建物に関する報告(IDSを経由して建物を取得)

おすすめ

転載: http://10.200.1.11:23101/article/api/json?id=395772&siteId=1