Linq to SQL:如何在没有字段上连接,即笛卡尔连接

本文关键字:连接 字段 笛卡尔 SQL to Linq | 更新日期: 2023-09-27 18:37:25

如何在多个表上进行 Linq To SQL 联接,其中 1 个表应该产生笛卡尔乘积。

为了更清楚地说明,下面是 SQL 查询的示例。

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

我的Linq to SQL是这样的:

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'的最后一次加入时收到错误。

Linq to SQL:如何在没有字段上连接,即笛卡尔连接

使用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};