0

誰か助けてもらえますか?

アソシエーションを使用した次の構造があります。ご覧のとおり、v.StructureType.Descriptionは1対1のアソシエーションとして機能しますが、以下の例でv.StructureGroup.StructureGroupTariffs.Tariff.Priceを取得する必要がありますが、StructureGroupTariffsはピボットテーブルを使用してStructureGroupとTariffsを相互リンクします。したがって、多対多であるため、EntitySetが返されます。問題は理解できましたが、修正方法がわかりません。

    from v in Houses
       select new 
       {
          Id = v.Id,
          Color = v.Color.Description,
          StructureType= v.StructureType.Description,
          Price = v.StructureGroup.StructureGroupTariffs. // Tariff.Price doesn't appear because its MANY to ONE
       }

したがって、私のstructureGroupTariffsが私のピボット(相互リンクテーブル)であることを理解して、渡す必要があります

                 IdTariff  and  StructureGroupId

これにより、1対1になります...したがって、StructureGroupTariffs.Tariff.Priceを使用できると思います??? これにより、StructureGroupとTariffの間で1対1が返されます。

私は少し混乱しているので、助けていただければ幸いです。

私は今問題を理解していますが、どうすれば修正できるかわかりません。

4

1 に答える 1

2

この種のクエリを SQL で解決する方法を考えてみてください。その推論を適用できると思います。この種の結合を作成するには、主に 2 つの方法があります。1 つ目は、適切なフィルターを使用して、メイン テーブルから結合テーブルへの内部結合を使用し、再び結果テーブルへの内部結合を使用する方法です。結合を正しくフィルタリングするように注意しないと、メイン テーブルごとに複数の行が取得されます (これが事実上、EntitySet を取得する理由です。そのエンティティ セットに対して .FirstOrDefault() を使用すると、探しているエンティティが取得されます (単一の結果に絞り込んだと仮定します。そうでない場合は、ランダムな結果が得られます)。

別の方法は、次のようなサブクエリを作成することです。

Price = (from t in v.StructureGroup.StructureGroupTariffs.Tariffs 
where t.StructionGroupID = v.StructureGroupID 
and t.IdTariff = *not sure where this filter comes from*
select t.Price).First()

上記のフィルターの欠落は、最初のアプローチでも同様に問題になります。どちらにしても、必要な t.Price を一意に識別する必要があります。

これは内部結合の例です (Doc_DocTag テーブルを介して DocTags を使用してドキュメントが多対多である私のスキーマから単純化されています。

from d in Docs 
join ddt in Doc_DocTags on d.DocGuid equals ddt.DocGuid
join dt in DocTags on ddt.DocTagID equals dt.DocTagID
select new {
    d.DocName, dt.DocTagName
}

タグが 1 つだけ必要な場合:

from d in Docs 
join ddt in Doc_DocTags on d.DocGuid equals ddt.DocGuid
join dt in DocTags on ddt.DocTagID equals dt.DocTagID
where dt.DocTagName == "Target"
select new {
    d.DocName, dt.DocTagName
}

これにより、Target のタグを持つドキュメントのみが検索されます (これにより、複数の DocTags が不可能になることがさらに保証されます)。

于 2009-10-15T19:08:53.010 に答える