如何使用linq为另一个表中的每一行选择表中的一行

时间:2016-07-25 05:39:03

标签: asp.net-mvc linq

我的问题很混乱,所以我尽力解释这个问题,假设我有两个表,Product和ProductPictures: enter image description here

所以根据型号,每个产品可能有一张或多张图片,我想选择一个产品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,我该怎么做?

2 个答案:

答案 0 :(得分: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 :(得分: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 
                });