我有這樣的實體:EF查找實體不在列表中
產品
public class Product
{
public int Id { get; set; }
public string Name { get; set; }
}
價目表
public class PriceList
{
public int Id { get; set; }
public string Name { get;set; }
}
PriceListProduct
public class PriceListProduct
{
public int Id { get; set; }
public int PriceListId { get; set; }
public int ProductId { get; set; }
public virtual Product Product { get; set; }
}
的問題是,我怎麼能得到產品不在價目表中使用L INQ?
我的第一個想法是使用Contains,但產品列表可能大於100000,如果Contains被轉換爲WHERE NOT IN子句之類的查詢,那麼SQL的參數大約有2000個參數,所以除了性能外,我認爲這不是最好的方法。
還有別的辦法嗎?我應該使用原始查詢嗎?
更新#1
我想了解以下羣組加入回答@Indregaard。到目前爲止,我有這個。
var productsWithNoPrice = db.Product()
.GroupJoin(db.PriceListProduct().Where(plp => plp.PriceListId == 2)
.Select(plp => plp.Product),
p => p.Id,
plp => plp.Id,
(p, product) => new { p.Id, Product = product })
.Where(p => !p.Product.Any())
.Select(p => p.Product);
與過濾
.Where(plp => plp.PriceListId == 2)
我過濾產品價格與ID爲2,我認爲這是接近,但通過SQL生成的查詢將返回相應數量的行數價目表中不存在的產品,但每一列都爲空。
基本上我需要的是這樣的
select * from Product p
left join PriceListProduct plp on plp.ProductId = p.Id and plp.PriceListId = 2
where plp.Id is null
你是什麼意思「不在價目表」?即不在表格中,還是不在某個具體列表中? –
不在表中。例如,如果有4種產品(P1,P2,P3,P4),並且我有一個包含P1和P3的價目表,我如何獲得產品P2和P4。 –