所有组合 - LINQ查询

时间:2014-08-27 20:42:50

标签: c# linq-to-sql

我有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记录其中attributeT3 ==“T3”但这两者必须具有相同的TABLE1_FK(=它们必须通过TABLE1记录连接)。

因此,如果TABLE2中有2条记录,其中TABLE1_FK == 1,而TABLE3中有2条记录,其中TABLE1_FK == 1,则需要所有组合== 4对。我可以通过foreach循环来执行此操作,并在每个步骤中查询数据库,但我认为这将是非常无效的,我想知道是否有更好的方法。

我认为它可能是这样的:

    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。感谢milion的任何回应。

2 个答案:

答案 0 :(得分:0)

我自己没有检查过,但也许值得一试。我们的想法是加入TABLE2和TABLE3中的FK列,并具有attibuteT3和attributeT2的条件

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

答案 1 :(得分:0)

我很抱歉,但在我点击提交按钮后2分钟,我想到了我没有尝试过的东西。

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

有效。非常感谢迈克尔。