我的问题很混乱,所以我尽力解释这个问题,假设我有两个表,Product和ProductPictures:
所以根据型号,每个产品可能有一张或多张图片,我想选择一个产品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
,我该怎么做?
答案 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
});