2016-10-13 16 views
0

linqToEntitiesクエリに問題があります。クエリ結果に製品がありません。 linqToEntities式で、Productプロパティを持つProductQuantityを正しく返す方法はありますか?Linqと参加しているエンティティへ

public class ProductQuantity 
     { 
      public string Id { get; set; } 
      public string SomeProperty { get; set; } 
      public Product Product { get; set; } 
      public Guid ProductId { get; set; } 
     } 

     public class Product 
     { 
      public Guid Id { get; set; } 
      public string SomeProperty { get; set; } 
      //... 
     } 

     // MyId is the ProductId I need 
     // The following will return all productQuantity detail but the Product property will be null 
     var result = myEntities.ProductQuantities.Include(x => x.Product).Where(x => x.ProductId == MyId) 

     // The following will work but I want to avoid refilling the object like this : 
     var result = myEntities.ProductQuantities.Include(x =>  x.Product).Where(x => x.ProductId == MyId) 
.Select(y => new ProductQuantity{ SomeProperty = y.SomeProperty, Product = y.Product}); 

エンティティへのlinqでこれを行う適切な方法は何ですか?なぜ単に製品がクエリと一緒に返されるだけではないのですか?以上のいずれかを使用したときに私の問題のような

おかげ

EDIT 1

ルック)は(.INCLUDEにreleatedされています。

ただ、前の例ではProductQuantityにカテゴリーを追加します。

//This will return the product but not the category 
    var result = myEntities.ProductQuantities.Include(x => x.Product).Include(x=> x.Category).Single(x => x.ProductId == MyId) 

//This will return the category but not the product 
    var result = myEntities.ProductQuantities.Include(x => x.Category).Include(x=> x.Product).Single(x => x.ProductId == MyId) 

いずれか一方のみを使用することができ、最初のものだけが働いているのはなぜ??????? (ネットで同様の例を見た?)

助けてください?

+0

これはあなたのために何をするのですか? ** myEntities.ProductQuantities.SelectMany(x => x.Product).Where(x => x.ProductId == MyId); ** –

+0

私はEFの経験があまりないのでわからないけどナビゲーションプロパティが正しく設定されていません。[here](https://msdn.microsoft.com/en-us/data/jj713564.aspx)を参照してください。 –

+0

includeは一部のオブジェクトプロパティのみで動作し、他のオブジェクトプロパティは機能しません未知の理由。すべて正しいと思われます... NavigationProperties、キーなどに何も問題はありません....私は動作していないプロパティに対して作業プロパティの違いを見ることはできません。非常に奇妙な – michelqa

答えて

0

他のインクルードで同じエンティティが使用されている場合に問題があるようです。 (例:Product.UnitとProduct.AlternateUnitは、同じエンティティが使用されていると同時に取得できません:unit)なぜか分かりませんが、別のクエリを使用してインクルードで取り出せないデータを取得します。

関連する問題