我可以在LINQ中对数据库实体使用嵌套查询吗?

时间:2016-05-27 08:53:53

标签: c# asp.net entity-framework linq

我正在开发一个使用SQL-Server数据库和数据库实体的ASP.Net应用程序。 此外,我有三个数据库实体相互依赖。 这是依赖关系层次结构:

  • 实例(密钥:InstanceID)
    • CustomField(Key:CustomFieldID,InstanceID)
    • CustomFieldData(Keys:CustomFieldDataID,CustomFieldID)
      • CustomFieldData_Person(Keys:CustomFieldData_PersonID,CustomFieldDataID)

我可以通过InstanceID找到实体CustomField中的条目:

var customFieldEntries = DB_Instance_Singleton.getInstance.CustomField.Where(x => x.InstanceID == instanceId);

现在我想查找CustomFieldData_Person中属于以InstanceID为键的层次结构的所有条目。

在SQL中我会写这样的东西:

SELECT * FROM CustomFieldData_Person WHERE CustomFieldDataID in (
  SELECT * FROM CustomFieldData WHERE CustomFieldID in (
    SELECT * FROM CustomField WHERE InstanceID = instanceId))

不幸的是,我对LINQ完全不熟悉。 所以我的问题是,如何在LINQ中编写这样的嵌套查询(根据上面的第一个代码示例)?

提前致谢!

2 个答案:

答案 0 :(得分:1)

首先,如果您正确创建了ER模型,那么您已经为您设置了大部分逻辑

Person将拥有一个属性Person.CustomData,它具有Field和Value的属性,因此您可以只导航对象结构

但是如果你没有,那么你可以将in语句转换为Contains

CustomFieldData_Person.Where(cfdp=>CustomFieldData.Where(nested query for CustomFieldData).Contains(cfdp.CustomFieldDataID )

答案 1 :(得分:0)

我认为这link可能是您提问的一个很好的起点。无论如何看看Pranav的评论,它指出一个有用的问题