如何使用LINQ将源表中的每一行连接到一行
本文关键字:一行 连接 LINQ 何使用 | 更新日期: 2023-09-27 18:21:17
我有下表(表A):
ID | Data |
1 | Data1 |
2 | Data2 |
3 | Data3 |
4 | Data4 |
我有一个表B,它有1行:
DummyID | Dummy |
1 | Dummy1 |
我必须以以下方式将表A与表B连接起来:
ID | Data |DummyID | Dummy |
1 | Data1 |1 | Dummy1 |
2 | Data2 |1 | Dummy1 |
3 | Data3 |1 | Dummy1 |
4 | Data4 |1 | Dummy1 |
显然,我不能在on
子句中使用任何ID。
from item in context.TableA
join dummy in context.TableB on ? = ?
select new
{
RowA=item,
Dummy=dummy
}
我怎么能用LINQ做到这一点?
这是一个交叉连接,您可以通过以下方式通过Linq获得
from item in context.TableA
from dummy in context.TableB
select new
{
RowA=item,
Dummy=dummy
}
或以下方法语法
context.TableA.SelectMany(
item => context.TableB.Select(dummy => new { RowA = item, Dummy = dummy }));
请注意,如果TableB每个都有一行以上,则最终会得到N乘M行,其中N是TableA中的行数,M是TableB中的行数来表示。
根本不需要加入。
from item in context.TableA
select new
{
RowA = item,
Dummy = context.TableB.FirstOrDefault()
}
话虽如此,我不得不质疑你为什么这么做。LINQ的想法是将关系数据转换为面向对象的形式。为什么不只检索一次TableB
信息,然后在内存中进行任何需要进行的处理呢?它将减少从数据库传输回应用程序的有效负载的大小。
为什么要使用联接。您希望使用旧序列中的每个项目在新序列中创建不同的项目。在LINQ中,您将使用Enumerable。为此选择:
var dummy = context.Dummy.FirstOrDefault();
var newSequence = context.TableA
.Select(itemInTableA =>
new
{
RowA = itemInTableA,
Dummy = dummy,
});