【问题标题】:Linq to Entity castingLinq 到实体转换
【发布时间】:2012-07-26 00:58:08
【问题描述】:

我的 Linq to Entity 查询有问题。我试图返回这样的列表:

List<InvoiceReportItem> cancelResults = (List<InvoiceReportItem>)(from cr in model.InvoiceReportItems //join l in model.tblLicences on cr.LicenceAuto equals l.LicenceAuto where cr.Report.Id == id select cr);

但它给了我错误:

无法投射类型>'System.Data.Objects.ObjectQuery1[LicExpiryNotModel_EF41.Model.InvoiceReportItem]' to &gt; type 'System.Collections.Generic.List1[LicExpiryNotModel_EF41.Model.InvoiceReportItem]'的对象。

有谁知道为什么会出现这个错误?快把我逼疯! :(

提前致谢 尼尔

【问题讨论】:

  • 不要投,只是把.ToList()放在查询后面。

标签: c# linq frameworks entity


【解决方案1】:

使用ToList()

List<InvoiceReportItem> cancelResults = 
 (from cr in model.InvoiceReportItems 
  join l in model.tblLicences on cr.LicenceAuto equals l.LicenceAuto where cr.Report.Id == id 
  select cr).ToList();

【讨论】:

  • 我试过了,它给出了一个编译错误:'错误 3 无法将方法组'ToList'转换为非委托类型'System.Collections.Generic.List' .您是否打算调用该方法? C:\sourceroot\LING\LING+Licensing\LING\LING_LicenceExpiryNotification\LicExpiryNotModel_EF41\LicenceExpiryNotification_WPF\MainWindow.xaml.cs 101 57 LicenceExpiryNotification_WPF'
  • 实际上它确实有效! :) 抱歉,我上次一定遗漏了括号之类的!
  • @niallNoigeallach:如果它有效,您可以通过单击答案左侧的复选标记来接受答案:)
【解决方案2】:

您不能将IQueryable 转换为List,而是在IQueryable 上使用.ToList() 方法,如下所示:

List<InvoiceReportItem> cancelResults = (from cr in model.InvoiceReportItems).ToList();

【讨论】:

    【解决方案3】:

    当您执行这样的查询时,LINQ 会延迟执行并返回 IQueryable。如果您愿意,这允许您在将来进一步查询(例如,添加额外的 where 子句)。无法将 IQueryable 泛型转换为列表。 正如其他人建议的那样,在代码上调用 ToList()

    List<InvoiceReportItem> cancelResults = (List<InvoiceReportItem>)(from cr in model.InvoiceReportItems //join l in model.tblLicences on cr.LicenceAuto equals l.LicenceAuto where cr.Report.Id == id select cr).ToList();
    

    【讨论】:

      猜你喜欢
      • 2013-05-03
      • 2012-09-13
      • 2016-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多