LINQ:根据每个项目有条件地加入两个不同的表

dis*_*nce 5 c# linq

有没有办法iflinq声明中设置?

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();
Run Code Online (Sandbox Code Playgroud)

我知道这段代码错了但我的问题是:

实现这个的最佳方法是什么?

usr*_*usr 5

请注意,以下内容并不能解决 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 });
Run Code Online (Sandbox Code Playgroud)

很快就写好了。您需要使两个查询的匿名类型兼容。这是唯一重要的事情。