c# – LINQ:根据每个项目有条件地连接到两个不同的表

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();

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

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

最佳答案
注意,以下内容并未解决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 });

快速写了.您需要使两个查询上的匿名类型兼容.这是唯一重要的事情.

转载注明原文:c# – LINQ:根据每个项目有条件地连接到两个不同的表 - 代码日志