Linq to SQL:如何加入无字段,即笛卡尔加入

Linq to SQL: How to join on no field i.e. cartesian join

如何使 Linq To SQL 加入多个 table,其中 1 table 应该产生笛卡尔积。

为了进一步说明,这里是 SQL 查询的示例。

SELECT Table1.MyField, Setup.SomeField
FROM Table1 INNER JOIN Table2 ON Table1.SomeField = Table2.SomeField, Setup

我对 SQL 的 Linq 是这样的:

var q = from t1 in db.Table1
        join t2 in db.Table2 on t1.SomeField equals t2.SomeField
        join setup in db.Setup 
        select new {t1.MyField, setup.SomeField};

我在 Type inference failed in the call to 'Join' 的最后一个连接上遇到错误。

使用 SelectMany 而不是 Join 来执行笛卡尔积。

查询语法为:

var query = from t1 in db.Table1
    from t2 in db.Table2
    select new {t1, t2};

这也可以:

var q = from t1 in db.Table1
        join t2 in db.Table2 on t1.SomeField equals t2.SomeField
        from setup in db.Setup 
        select new {t1.MyField, setup.SomeField};