从EF中的join语句返回一级结果列表

时间:2014-05-16 19:57:18

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

我有以下简单的连接语句:

Dim result = (From PropertyDefinition In econtext.PropertyDefinitions
              Join ProductDef In econtext.ProductPropertyValues
                On PropertyDefinition.PropertyDefID Equals ProductDef.ProductPropDefID
              Where ProductDef.ProductID = 1
              Select ProductDef,
                     PropertyDefinition.PropertyDefName,
                     PropertyDefinition.PropertyDefName2,
                     PropertyDefinition.PropertyDefIIsDeleted).list()

如果我明确包含 ProductDef 下的所有列,它可以使用,结果出现在一个列表中,目前 ProductDef 的结果将出现在一个单独的列表中:

enter image description here

我需要 ProductDef PropertyDefinition 中的所有内容,但不需要嵌套列表中的内容,

如何在一次性列表中获得结果,而无需明确包含 ProductDef 的所有列?

1 个答案:

答案 0 :(得分:1)

我认为你不能。

您将ProductDef作为嵌套对象获取,因为当您将ProductDef指定为要返回的值之一时,这正是您所要求的: ProductDef对象本身,而不是它的任何属性。

您想要的似乎等同于SQL Server的table1.*语法,用于请求返回给定表的所有列,并且还可能返回其他值。但我不认为LINQ中存在这种情况。

您可以使用可以执行此操作的动态数据类型来处理某些事情,但老实说,只需列出您想要的所有属性就更简单了。

ETA:或者,您可以创建另一个具有所需属性的类型,并创建一个带有ProductDefPropertyDefinition的构造函数,并填充构造函数参数中的所有字段。这将为您提供一个具有您想要的所有属性的对象。但它肯定会有更多的工作。