在这种情况下如何做工会或“或”?

时间:2013-07-31 17:22:24

标签: c#-4.0 linq-to-entities entity-framework-5

我有一个主表,其中包含两个表的公共信息。我还有两个表,每个表都有每种类型的特定信息。最后,我有一个与这两个辅助表中的任何一个有关系的最后一个表。这个最后一个表与这个次表中的一个或两个表有关系是可能的。

模型是:

  • MainTable(IDMainTable,Name ...)
  • Secondary01(IDSecondary01,IDMaintable,Name ....)
  • Secondary02(IDSecondary02,IDMainTable Name ....)
  • 数据(IDData,名称......)
  • DataRelationship(IDData,IDSecondary01,IDSecondary02)

我想获取主表中的所有寄存器,其中任何辅助表都与数据有关。我把IDData作为条件。

在SQL中它会是这样的:

select * from Maintable, Secondary01, DataRelationship
where MainTable.IDMainTable = Secondary01.IDMainTable
and Secondary01.IDSecondary01 = DataRelationship.IDSecondary01
and DataRelationship.IDData = 1234

UNION
select * from Maintable, Secondary02, DataRelationship
where MainTable.IDMainTable = Secondary02.IDMainTable
and Secondary02.IDSecondary02 = DataRelationship.IDSecondary02
and DataRelationship.IDData = 1234

如何使用扩展方法或linq实体进行此查询?

感谢。

1 个答案:

答案 0 :(得分:1)

您可以使用Enumerable.Union方法。

  

使用默认相等性生成两个序列的集合并   比较器。

喜欢:

var query = (from t in db.Maintable
            from r in db.Secondary02
            //.....your rest of query
            select ...)
            .Union
            (from t in db.Maintable
            from r in db.Secondary02
            //.....your rest of query
            select ...);