【问题标题】:LINQ to Entities does not recognize the method 'System.String get_Item(Int32)' method, and this method cannot be translated into a store expressionLINQ to Entities 无法识别方法 'System.String get_Item(Int32)' 方法,并且此方法无法转换为存储表达式
【发布时间】:2016-12-19 16:52:33
【问题描述】:

当我执行这个查询时,我得到这个错误:

return (from i in _ctx.TestPackages
   where i.Id==TestPackageId

   select new  ViewTestPackageState
   {
       Id = i.Id,
       PackageNumber = i.PackageNumber,
       ReInstatement = ReturnTestPackageState(i.Id, "Reinstatment")[0],
       ReInstatementReportNumber = ReturnTestPackageState(i.Id, "Reinstatment")[1],
       ReInstatementSubmitDateTime = ReturnTestPackageState(i.Id, "Reinstatment")[2],

       TestReportNumber = ReturnTestPackageState(i.Id, "Test")[1],
       TestState = ReturnTestPackageState(i.Id, "Test")[0],
       TestSubmitDateTime = ReturnTestPackageState(i.Id, "Test")[2],

       CleanReportNumber = ReturnTestPackageState(i.Id, "Clean")[1],
       CleanSubmitDateTime = ReturnTestPackageState(i.Id, "Clean")[2],
       CleaningState = ReturnTestPackageState(i.Id, "Clean")[0],

       Drying = ReturnTestPackageState(i.Id, "Drying")[0],
       DryingReportNumber = ReturnTestPackageState(i.Id, "Drying")[1],
       DryingSubmitDateTime = ReturnTestPackageState(i.Id, "Drying")[2],

       Flushing = ReturnTestPackageState(i.Id, "Flushing")[0],
       FlushingReportNumber = ReturnTestPackageState(i.Id, "Flushing")[1],
       FlushingSubmitDateTime = ReturnTestPackageState(i.Id, "Flushing")[2],

       LineCheckReportNumber = ReturnTestPackageState(i.Id, "LineCheck")[1],
       LineCheckState = ReturnTestPackageState(i.Id, "LineCheck")[0],
       LineCheckSubmitDateTime = ReturnTestPackageState(i.Id, "LineCheck")[2],

       Size = i.Size.ToString(),
       TestPackageOrder = i.TestPackageOrder,

   }).ToList();

错误:LINQ to Entities 无法识别方法 'System.String get_Item(Int32)' 方法,并且此方法无法转换为存储表达式

我知道问题是因为查询和查询应该在 select 语句之前执行,所以我的问题是如何在 select 之前执行这个查询?

【问题讨论】:

  • 评论否决票

标签: c# entity-framework linq


【解决方案1】:

执行查询,然后从结果中选择对象

var result = (from i in _ctx.TestPackages
   where i.Id==TestPackageId).ToList();

return(result.Select( new ViewTestPackageState{...}));

【讨论】:

    【解决方案2】:
    var rawList = (from i in _ctx.TestPackages where i.Id==TestPackageId).ToList();
    
    return rawList.Select(i => new ViewTestPackageState
           {
               Id = i.Id,
               PackageNumber = i.PackageNumber,
               ReInstatement = ReturnTestPackageState(i.Id, "Reinstatment")[0],
               // etc
    

    【讨论】:

      猜你喜欢
      • 2012-12-02
      • 2022-06-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多