[c#] LINQラムダ内の複数のテーブル間で結合を実行する方法



1 Answers

あなたが見たことは、あなたが得るものです - それはあなたが求めたものです、ここで:

(ppc, c) => new { productproductcategory = ppc, category = c}

これは、これら2つのプロパティを持つ匿名型を返すラムダ式です。

あなたのCategorizedProductsでは、あなたはそれらのプロパティを経由する必要があります:

CategorizedProducts catProducts = query.Select(
      m => new { 
             ProdId = m.productproductcategory.product.Id, 
             CatId = m.category.CatId, 
             // other assignments 
           });
Question

私は、LINQの複数のテーブル間で結合を実行しようとしています。 私は以下のクラスを持っています:

Product {Id, ProdName, ProdQty}

Category {Id, CatName}

ProductCategory{ProdId, CatId} //association table

そして、私は次のコードを使用します( productcategoryおよびproductcategoryは上記のクラスのインスタンスです)。

var query = product.Join(productcategory, p => p.Id, pc => pc.ProdID, (p, pc) => new {product = p, productcategory = pc})
                   .Join(category, ppc => ppc.productcategory.CatId, c => c.Id, (ppc, c) => new { productproductcategory = ppc, category = c});

このコードでは、次のクラスからオブジェクトを取得します。

QueryClass { productproductcategory, category}

producproductcategoryのタイプは次のとおりです。

ProductProductCategoryClass {product, productcategory}

私は、結合された "テーブル"がどこにあるのか理解していない、私は関与するクラスのすべてのプロパティを含む単一のクラスを期待していた。

私の目的は、クエリの結果としていくつかのプロパティを持つ別のオブジェクトを設定することです。

CategorizedProducts catProducts = query.Select(m => new { m.ProdId = ???, m.CatId = ???, //other assignments });

どうすればこの目標を達成できますか?




 public ActionResult Index()
    {
        List<CustomerOrder_Result> obj = new List<CustomerOrder_Result>();

       var  orderlist = (from a in db.OrderMasters
                         join b in db.Customers on a.CustomerId equals b.Id
                         join c in db.CustomerAddresses on b.Id equals c.CustomerId
                         where a.Status == "Pending"
                         select new
                         {
                             Customername = b.Customername,
                             Phone = b.Phone,
                             OrderId = a.OrderId,
                             OrderDate = a.OrderDate,
                             NoOfItems = a.NoOfItems,
                             Order_amt = a.Order_amt,
                             dis_amt = a.Dis_amt,
                             net_amt = a.Net_amt,
                             status=a.Status,  
                             address = c.address,
                             City = c.City,
                             State = c.State,
                             Pin = c.Pin

                         }) ;
       foreach (var item in orderlist)
       {

           CustomerOrder_Result clr = new CustomerOrder_Result();
           clr.Customername=item.Customername;
           clr.Phone = item.Phone;
           clr.OrderId = item.OrderId;
           clr.OrderDate = item.OrderDate;
           clr.NoOfItems = item.NoOfItems;
           clr.Order_amt = item.Order_amt;
           clr.net_amt = item.net_amt;
           clr.address = item.address;
           clr.City = item.City;
           clr.State = item.State;
           clr.Pin = item.Pin;
           clr.status = item.status;

           obj.Add(clr);



       }



Related