2016-07-25 126 views
0
選擇一列

我的問題是混亂的,所以我盡我所能來說明問題,假設我有兩個表,產品和ProductPictures: enter image description here如何在一個表中的另一個表中的每一行使用LINQ

所以要根據每個產品型號可能有一個或多個圖片,我想選擇一個產品,它的Id等於productId,它有ProductPicturePath過,換句話說,我想選擇Product.ProductName, ProductPictures.ProductPicturePath, Product.ProductDescription, Product.Price

所以我試試這個:

[HttpGet] 
    public JsonResult GetProducstDetail(int productId) 
    { 

     var resultProduct = from product in db.Products 
          from productPicture in (from firstProductPicture in db.ProductPictures where firstProductPicture.ProductId==product.Id select firstProductPicture.ProductPicturePath).FirstOrDefault() 
          where product.Id == productId 
          select new { product.ProductName, productPicture, product.ProductDescription, product.Price }; 


     if (resultProduct == null) 
     { 
      return Json(-1, JsonRequestBehavior.AllowGet); 
     } 
     return Json(resultProduct, JsonRequestBehavior.AllowGet); 

    } 

但它給了我錯誤:DbExpressionBinding requires an input expression with a collection ResultType. Parameter name: input,我該怎麼做?

回答

1

您可以使用ProductPictures導航屬性:

var resultProduct = 
    from product in db.Products 
    where product.Id == productId && product.ProductPictures.Any() 
    select new 
    { 
     product.ProductName, 
     product.ProductPictures.FirstOrDefault().ProductPicturePath, 
     product.ProductDescription, 
     product.Price 
    }; 
1

你的查詢沒有equals clause

試試這個

var resultProduct = db.Products.Where(i => i.Id == productId).Select(t => new 
       { 
        ProductName = t.ProductName, 
        productPicture = (db.ProductPictures 
             .Where(i=> i.ProductId == t.Id)    
             Select(i => i.ProductPicturePath) 
             .FirstOrDefault() 
            ), 
        ProductDescription = t.ProductDescription, 
        Price = t.Price 
       }); 
+0

謝謝妳,爲我的工作+1,但我希望有一個LINQ的解決方案 – pejman

相關問題