所有组合-LINQ查询
本文关键字:查询 -LINQ 组合 | 更新日期: 2023-09-27 18:19:56
我有3个表(OR映射模型中的对象,不管怎样)。让我们称它们为TABLE1、TABLE2和TABLE3=>实际名称是捷克语,我认为这将是一个更好的例子。
1) TABLE1与TABLE2具有1-N关系。2) TABLE1与TABLE3也存在1-N关系。所以表格看起来像这样:
TABLE2
{
int ID;
nvarchar attributeT2;
int TABLE1_FK;
}
TABLE1
{
int ID;
}
TABLE3
{
int ID;
nvarchar attributeT3
int TABLE1_FK;
}
现在我需要所有的组合:TABLE2记录(其中attributeT2=="T2")和TABLE3记录(其中ttributeT3=="T3"),但这两个记录必须具有相同的TABLE1_FK(=它们必须由TABLE1记录连接)。
因此,如果TABLE1_FK==1的TABLE2中有2条记录,TABLE1_FH==1的TABLES3中有2个记录,我需要所有组合==4对。我可以通过foreach循环来做到这一点,并在每一步中查询DB,但我认为这将是非常无效的,我想知道是否有更好的方法。
我以为它可能是这样的:
var query= from x in context.TABLE2
where x.attributeT2 == "T2"
join y in context.TABLE3 on x.TABLE1_FK == y.TABLE1_FK
where y.attributeT3 == "T3"
select new WrapperClass(x,y);
但组合是错误的-这对并不总是具有相同的TABLE1_FK。非常感谢您的回复。
我自己没有检查,但也许值得一试。这个想法是在TABLE2和TABLE3中的FK列上连接,并具有attibuteT3和attributeT2 的where条件
var query= from x in context.TABLE2
join y in context.TABLE3 on x.TABLE1_FK == y.TABLE1_FK
where y.attributeT3 == "T3" && x.attributeT2 == "T2"
select new WrapperClass(x,y);
我很抱歉,但在我点击提交按钮两分钟后,我想到了一些我没有尝试过的东西。
var asdf = from x in context.TABLE1
join y in context.TABLE2 on x.ID equals y.TABLE1_FK
where y.attributeT2 == "T2"
join z in context.TABLE3S on x.ID equals z.TABLE1_FK
where z.attributeT3 == "T3"
select new WrapperClass(y,z);
它奏效了。无论如何,非常感谢迈克尔。