有没有办法在if
声明中设置linq
?
return(from x in db.products where x.id == id
if(x.type == 1){
join y in db.category1 on x.idItem equals y.id
}else if(x.type == 2){
join z in db.category2 on x.idItem equals z.id
}
select New {....}).ToList();
我知道这段代码错了,但我的问题是:
实施此方法的最佳方式是什么?
答案 0 :(得分:4)
请注意,以下内容并未解决OP所具有的问题,因为连接谓词取决于每个项目。如果一次知道整个查询的条件,则以下内容会有所帮助:
您拆分查询:
var part1 = from x in db.products where x.id == id select x;
var part2 =
b ? (from x in part1 join db.category1 select { x, joinedItem }) :
(from x in part1 join db.category2 select { x, joinedItem });
快速写下来。您需要使两个查询上的匿名类型兼容。这是唯一重要的事情。
答案 1 :(得分:3)
您可以执行LEFT JOIN,LEFT JOIN的其中一个条件可能是您在IF子句中的条件。因此,您始终执行所有LEFT JOIN,但只有当IF cluase中的条件为真时,它们才会返回结果。
另一种方式,具有更好的性能,是创建一个存储过程并从EF调用它。