Linq to SQL:如何在没有字段的情况下加入,即笛卡尔加入

时间:2015-01-13 17:26:39

标签: c# linq-to-sql

如何在多个表上进行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'的最后一次加入时收到错误。

2 个答案:

答案 0 :(得分:2)

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

在查询语法中:

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

答案 1 :(得分:1)

这也可以:

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