我有下表(表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做到这一点?
答案 0 :(得分:6)
这是一个交叉联接,您可以通过以下方式通过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中的行数。
答案 1 :(得分:1)
根本不需要加入。
HashSet<Integer> set = new HashSet<Integer>();
set.add(num);//returns true if the num was not inserted before else return false
if(!set.add(num))//set also has a contains method
{
System.out.println("You already entered " + num);
}
话虽如此,我不得不质疑你为什么要这样做。 LINQ的想法是将关系数据转换为面向对象的形式。为什么不只检索一次from item in context.TableA
select new
{
RowA = item,
Dummy = context.TableB.FirstOrDefault()
}
信息并执行内存中需要处理的任何处理?它会减少您从数据库传输回应用程序的有效负载大小。
答案 2 :(得分:0)
为什么要使用join。您希望使用旧序列中的每个项目在新序列中创建不同的项目。在LINQ中,您将使用Enumerable.Select:
var dummy = context.Dummy.FirstOrDefault();
var newSequence = context.TableA
.Select(itemInTableA =>
new
{
RowA = itemInTableA,
Dummy = dummy,
});