2017-08-15 9 views
0
public partial class Product 
{ 
    public Product() 
    { 
     this.ProductPrimaryPrices = new HashSet<ProductPrimaryPrice>(); 
     this.ProductSecondaryPrices = new HashSet<ProductSecondaryPrice>();    
    } 

    public int ProductId { get; set; }  
    public string Code { get; set; } 
    public string Name { get; set; } 
    public string Description { get; set; } 
    public byte[] Image { get; set; }   

    public virtual ICollection<ProductPrimaryPrice> ProductPrimaryPrices { get; set; }   
    public virtual ICollection<ProductSecondaryPrice> ProductSecondaryPrices { get; set; } 
} 

をのみ選択したマスタテーブルの列とディテール表のすべての列を選択するために、どのように、私はProductIdCodeName、およびDescriptionProduct実体のを選択したいとProductPrimaryPricesのすべての関連プロパティおよびProductSecondaryPrice、データベースから画像byte[]アレイをロードするのに時間がかかるためです。 Productエンティティから選択した列と、ProductPrimaryPriceProductSecondaryPricesのすべての列のみが必要です。上記のコードからのLINQ

私はすでに次のような匿名のタイプで試していますが、匿名のタイプをProductに戻す方法に苦労しています。

var tempProduct = (from p in ctx.Products.Include("ProductPrimaryPrices").Include("ProductSecondaryPrices") 
        select new 
          { 
           ProductId = p.ProductId,         
           Code = p.Code, 
           Name = p.Name, 
           Description = p.Description,          
           ProductPrimaryPrices = p.ProductPrimaryPrices, 
           ProductSecondaryPrices = p.ProductSecondaryPrices          
          } 
       ).ToList(); 

誰でもお手伝いできますか?

+1

あなたは '新製品{...}を選択し'とそこにそのプロパティを設定することができますに匿名型を変換する方法です。正直言って私は、よりクリーンな長期的な解決策は、バイト配列を 'Product'のサブオブジェクトとして別のテーブルに移動し、そのプロパティを遅延ロードすることだと思います。 – David

+0

'Product'エンティティの完全なデータがないので、匿名型をどのように' Product'に変換することができないのか分かりません。最終的に 'Product'エンティティを更新するためにこのデータを(匿名型で)使用するつもりですか?あなたは正確に何を達成しようとしていますか? – STLDeveloper

+0

ありがとう、@あなたのコメントのためのDavid。私は既に 'new product {...} 'を選択しようとしましたが、'エンティティまたは複合型' Product 'をLINQ to Entitiesクエリで構築することはできません。また、バイト配列を別のテーブルに移動することは本当に良い考えです。 –

答えて

0

最後に、私は今

を襲撃、いくつかの脳の後に答えを得た、私はリフレクションを使用してProduct型に匿名型を変換することができています。私は、匿名型を 'Product'型に変換し、次に匿名型をループして、新しく実装されたメソッドを呼び出すことによってProduct型に変換するメソッドを実装しました。続き

には、以下の実施

public List<Product> GetProduct() 
{ 
    List<Product> products = new List<Product>(); 
    using (var ctx = new PosEntities()) 
    { 
     var tempProducts = 
      (from p in ctx.Products.Include("ProductPrimaryPrices").Include("ProductSecondaryPrices").Include("ProductsModifiers") 
      where (p.MenuGroupId == menuGroupId && p.Active) && (p.ProductPrimaryPrices.Any(x => x.OutletId == outletId && x.Active)) 
      select new 
      { 
       ProductId = p.ProductId, 
       Code = p.Code, 
       Name = p.Name, 
       Description = p.Description,     
       ProductPrimaryPrices = p.ProductPrimaryPrices, 
       ProductSecondaryPrices = p.ProductSecondaryPrices, 
       ProductsModifiers = p.ProductsModifiers 
      }).ToList();      

     foreach (object anonymous in tempProducts) 
     { 
      Product product = (Product)Utility.ToType<Product>(anonymous, new Product()); 
      products.Add(product); 
     } 
     return products; 
    } 
} 

あるProductタイプ

public static class Utility 
    { 
     public static object ToType<T>(this object obj, T type) 
     { 
      //create instance of T type object:    
      object tmp = Activator.CreateInstance(Type.GetType(type.ToString())); 

      //loop through the properties of the object you want to covert:   
      foreach (PropertyInfo pi in obj.GetType().GetProperties()) 
      { 
       try 
       { 
        //get the value of property and try to assign it to the property of T type object: 
        tmp.GetType().GetProperty(pi.Name).SetValue(tmp, pi.GetValue(obj, null), null); 
       } 
       catch (Exception ex) 
       { 
        // Logging.Log.Error(ex); 
       } 
      } 
      //return the T type object:   
      return tmp; 
     }  
    } 
+0

あなたの' new {...} 'セレクタを 'new Product {...}'に変更するDavidの提案を使用することを検討しましたか?独自のバージョンのAutoMapperを作成するよりも簡単です。 'Product'のプロパティの名前変更がマッピングを壊さないので、エラーが起こりにくくなります。 – StriplingWarrior

+1

@StriplingWarrior私はすでにそれを試みましたが、そのエンティティまたは複合型 'Product'はLINQ to Entitiesクエリで構築できませんでした。 –

関連する問題