【问题标题】:Return one-level result list from a join statement in EF [duplicate]从 EF 中的连接语句返回一级结果列表 [重复]
【发布时间】:2014-05-16 19:57:18
【问题描述】:

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

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 的结果出现在一个单独的列表中:

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

如何在不需要显式包含ProductDef的所有列的情况下获得一次性列表中的结果?

【问题讨论】:

  • 像这样:Select ProductDef.ProductPropValueID, ProductDef.ProductID, ProductDef.ProductPropDefID,etc 而不仅仅是Select ProductDef
  • @GertArnold,这里的问题不同,我没有对返回的数据进行自定义,我只有PropertyDefinition的两个属性和ProductDef的25个,写一个真的很痛苦代码中的一个。
  • 我没有看到任何显着差异。你想做的事是做不到的。在 LINQ 中没有 SELECT * 的等价物。

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


【解决方案1】:

我不认为你可以。

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

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

您可以使用可以做到这一点的动态数据类型来处理某些事情,但老实说,列出您想要的所有属性会更简单。

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

【讨论】:

  • 没错,我需要它就像SQL Server返回一样,问题是,我只有第一个的两个属性和第二个的25个,在代码中一个一个写它真的很痛苦。
  • 出于好奇,创建完这个匿名类型之后你打算怎么处理呢? 27 个属性有很多要显示的,所以我假设您正在用它做其他事情。
  • 一个产品管理页面,我想在一个查询中收集所有需要的信息,然后从客户端级别的网格中访问,我这样做是为了减少不必要的数据库请求。
猜你喜欢
  • 1970-01-01
  • 2012-12-20
  • 2015-02-15
  • 1970-01-01
  • 2020-08-31
  • 2021-01-04
  • 1970-01-01
  • 1970-01-01
  • 2019-07-16
相关资源
最近更新 更多