【问题标题】:Cross join or full join in LINQ to SQL queryLINQ to SQL 查询中的交叉连接或完全连接
【发布时间】:2013-01-17 20:31:35
【问题描述】:

我在读书时偶然发现了这个 LINQ 查询。

var binary = new int[] { 0, 1 };

var q = from b4 in binary
        from b3 in binary
        from b2 in binary
        from b1 in binary
        select String.Format("{0}{1}{2}{3}", b4, b3, b2, b1);

foreach (var element in q)
    Console.WriteLine(element);

上述 LINQ 的结果将是

0000
0001
0010
0011
0100
0101
0110
0111
1000
1001
1010
1011
1100
1101
1110
1111

我想看看这在 SQL Server 中会如何。

我尝试过的:

create table LINQ(x bit)
insert LINQ select 0
insert LINQ select 1

create table LINQ(x bit, y bit)
insert LINQ select 0,1

我尝试使用 LINQPAD(不提供 SQL 或 lambda 版本),使用上述临时表。我试过交叉加入,完全加入。我没有得到与 LINQ 相同结果的 SQL。

【问题讨论】:

  • 鉴于您的用户名,您一定非常着迷于 1 和 0。无论如何,虽然 Linq 似乎是 SQL 的代理,但实际上并非如此。 Linq 适用于任何集合,而不仅仅是表。
  • @85:Robert Harvey 说的是哪个用户名?
  • @Robert Harvey 非常痴迷于 1 和 0 :) 绝非巧合。

标签: c# sql sql-server linq tsql


【解决方案1】:
SELECT CAST(l1.x as varchar(4)) + CAST(l2.x as varchar(4))+ CAST(l3.x as varchar(4)) + CAST(l4.x as varchar(4))
FROM LINQ as l1, LINQ as l2, LINQ as l3, LINQ as l4
ORDER BY l1.x, l2.x, l3.x, l4.x

sqlfiddle here

【讨论】:

  • 我认为这不会产生预期的输出。
  • 是的,这并没有像罗伯特所说的那样给出预期的结果
  • 不是吗?检查 sqlfiddle - 它有什么不同?
  • @1010101:检查 SQLFiddle
  • @1010101: 01101110011011110010000001110000011100100110111101100010011011000110010101101101
猜你喜欢
  • 1970-01-01
  • 2013-04-12
  • 2013-05-24
  • 1970-01-01
  • 2016-02-17
  • 2012-12-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多