我有几个链接表(实体)。我正在尝试使用以下linq获取实体:
ObjectQuery<Location> locations = context.Location;
ObjectQuery<ProductPrice> productPrice = context.ProductPrice;
ObjectQuery<Product> products = context.Product;
IQueryable<ProductPrice> res1 = from pp in productPrice
join loc in locations
on pp.Location equals loc
join prod in products
on pp.Product equals prod
where prod.Title.ToLower().IndexOf(Word.ToLower()) > -1
select pp;
此查询返回2条记录,ProductPrice对象具有链接对象Location和Product但它们为null,我无法理解原因。如果我尝试将它们填入linq,如下所示:
res =
from pp in productPrice
join loc in locations
on pp.Location equals loc
join prod in products
on pp.Product equals prod
where prod.Title.ToLower().IndexOf(Word.ToLower()) > -1
select new ProductPrice
{
ProductPriceId = pp.ProductPriceId,
Product = prod
};
我有一个例外“无法在LINQ to Entities查询中构造实体或复杂类型'PBExplorerData.ProductPrice'” 有人可以解释一下我发生了什么以及我需要做什么? 感谢
答案 0 :(得分:0)
您的第一个问题的答案是产品和位置为空,因为您需要在查询中添加包含(“”)。
IQueryable<ProductPrice> res1 = from pp in
productPrice.Include("Location").Include("Product")
join loc in locations
on pp.Location equals loc
join prod in products
on pp.Product equals prod
where prod.Title.ToLower().IndexOf(Word.ToLower()) > -1
select pp;
第二个问题是EF正试图压低你的查询和ProductPrice(不是实体)所以它不能。如果你想这样做,将它转换为匿名类型,所以只需做
select new
{
ProductPriceId = pp.ProductPriceId,
Product = prod
};
然后再做
res.ToList().ConvertAll(x=new ProductPrice () {
ProductPriceId = x.ProductPriceId ,
Product = x.Product
});
或者你可以通过选择你想要的实体,只需填写手册,以其他方式。