【问题标题】:Entity Framework Core store joined table in a variable [duplicate]实体框架核心将连接表存储在变量中[重复]
【发布时间】:2017-11-30 20:28:03
【问题描述】:

我正在使用 Entity Framework 加入两个表,如下所示:

List<Drivers> drivers;
drivers = (from dr in context.Drivers
          join per in context.Person on dr.dr_no_person equals per.per_id
          select new { dr, per }).ToList();

当然不行,因为{dr, per}是匿名类型,不能翻译成Drivers

我的问题:有什么方法可以将我的查询返回的内容存储在一个变量中,以便我可以将它作为一个列表返回,最终在DataTable 中显示它?

【问题讨论】:

  • 使用var 作为结果类型,看看编译器选择了什么作为type ?
  • @FelixD 结果将是List&lt;anontype1[Drivers,Person]>`。
  • 这样你仍然可以访问DriversPerson - 这不是他想要的吗?
  • 我不确定他还想要什么。
  • @NetMage 确实如此。考虑到他们可以(应该)将 Person 导航属性添加到 Driver 类并避免整个查询这一事实,这个问题听起来像是一个很好的结束候选者。

标签: c# forms entity-framework


【解决方案1】:

您可以将drivers 声明为匿名类型列表:

var drivers = (...).ToList();

或者您可以在查询中创建Drivers 对象:

drivers = (from dr in context.Drivers
           join per in context.Person on dr.dr_no_person equals per.per_id
           select new Drivers { ... }).ToList();

如果要将结果分配给简单的DataGridView 并显示列,则必须提取所需的值。

var drivers = (from dr in context.Drivers
               join per in context.Person on dr.dr_no_person equals per.per_id
               select new { dr.dr_no_person, per.per_id, per.name, ... }).ToList();

不幸的是,LINQ 没有与 SQL 中的 * 等效的简单方法。我有一个(相当复杂的)扩展方法,它允许组合两种匿名类型,但它不适合胆小的人,也不是强类型 - 它返回新的匿名类型 object

【讨论】:

  • 那么join 就完全没用了...
  • 不,join 会将drivers 限制为具有匹配Person 的那些。如果这不是你想要的,你为什么要声明 driversList&lt;Drivers&gt;
  • 对 - 搞糊涂了...
  • 感谢你,我可以将它存储在一个变量中,它在我的 DataGridView 思想中没有正确显示,它只给了我 2 列填充了名为 [myprojectnamespace].Drivers/Person 的对象.感谢您回答不太清楚的问题,对不起^^'。太糟糕了,它导致了另一个问题。
  • 对象不是那样“命名”的,它是它们的运行时类型。如果您正确执行绑定,则 2 列不正确 - 显然您不能将对象直接绑定到视图。
猜你喜欢
  • 2021-11-18
  • 1970-01-01
  • 2018-06-03
  • 2016-09-18
  • 1970-01-01
  • 2018-12-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多