1

DBにクエリがあります:

SELECT  GreenInventoryBlendGradeID,bgx.blendgradeid,
        bgX.GreenBlendGradeTypeID,[Description]
  FROM [GreenInventory] gi 
 INNER JOIN [GreenInventoryBlendGradeXref] bgX 
    ON bgX.[GreenInventoryID] = gi.[GreenInventoryID] 
 INNER JOIN [BlendGrade] bg
    ON bg.[BlendGradeID]=bgx.[BlendGradeID]

3 つのレコードが返されます。

タイプ ID の説明


1 XR
2 XR
1 XF2

リンク:

    var GreenInventory = (from g in Session.GreenInventory
                    .Include("GreenInventoryBlendGradeXref")
                    .Include("GreenInventoryBlendGradeXref.BlendGrade")
                    .Include("GreenInventoryBlendGradeXref.GreenBlendGradeType")
                    .Include("GreenInventoryWeightXref")
                    .Where(x => x.GreenInventoryID == id && x.GreenInventoryBlendGradeXref.Any(bg=>bg.GreenBlendGradeTypeID > 0) )
            select g);

単純な - (x => x.GreenInventoryID == id) を含むさまざまな Where 句を試しましたが、常に最初の 2 つのレコードのみが返されます。

何か案は?

次のことを試してみると:

var GreenInventory = (from gi in Session.GreenInventory.Where(y => y.GreenInventoryID == id)  
join bgX in Session.GreenInventoryBlendGradeXref.DefaultIfEmpty() on gi.GreenInventoryID equals bgX.GreenInventoryID  
join bg in Session.BlendGrade.DefaultIfEmpty()  on bgX.BlendGradeID equals g.BlendGradeID  
select new { GreenInventory = gi, GreenInventoryBlendGradeXref = bgX, BlendGrade = bg });

各オブジェクトの 3 つを取得し、正しい情報が BlendGrade オブジェクトにあります。3 つの GreenInventory オブジェクトは同じようです。それぞれに、以前と同じ 2 つのレコードを示す GreenInventoryBlendGradeXref オブジェクトが 2 つ含まれています。

したがって、元の問題が何であったかはわかりません。また、これがそれを解決するための最良の方法であるかどうかもわかりません。

答えてくれてありがとう。さらに考えがある場合は、お知らせください。

4

2 に答える 2

1

あなたが提示したいくつかの詳細に基づいて、私はあなたが参加していないと思います. 私は EntityFramework の経験がありません (この ORM を使用していると思います) が、私の知る限り、「.Include」は、ルート エンティティのセットが変更されず、重複が含まれないようにしようとします。

手動で作成したクエリは、モデルに少なくとも 1 つの 1:n 関係があることを示しているようです。LINQ から取得した結果は、個別の GreenInventory エンティティのみが返されることを示しています。

したがって、クエリを調整し、(個別のルート エンティティだけでなく) すべての結果が必要であることを明示的に宣言する必要があります。

于 2012-07-27T13:57:11.437 に答える
0

私が最初に調べる場所は、モデルと、エンティティ間で定義した結合です。生成された SQL ステートメントを確認することもできます。

Trace.WriteLine(GreenInventory.Provider.ToString())

または、Visual Studio IntelliTrace を使用して、データベースに送信された内容を調査します。

于 2012-07-27T13:13:12.167 に答える