0

这是我发现的一个常见错误,但我不确定如何修复它。

LINQ to Entities does not recognize the method
'System.Linq.IQueryable`1[ProjectX.Models.DTOs.ExampleDTOUDC] Select(Int32)'
 method, and this method cannot be translated into a store expression.

这是有问题的违规代码。

    public IQueryable<ExampleDTO> Select()
    {
        return from e in db.vw_Example
                   select new ExampleDTO()
                   {

                       exampleUDCs =  new ExampleUDCRepository().Select(v.VehicleID).AsEnumerable()
                       //etc


                   };
    }

ExampleUDCRepository.Select() 方法是:

  public IQueryable<ExampleUDCDTO> Select(int id)
  {
        return from eudc in db.ExampleUDCs
               where eudc.ExampleID == id
               select new ExampleUDCDTO()
               {
                   ExampleID = eudc.ExampleID,
                   //etc
               };
   }

我理解为什么 Linq 需要将所有内容都以可以转换为 SQL 查询的形式呈现,但我不明白为什么这样做我从第Select()一种方法中获取相同的查询并执行以下操作:

        public IQueryable<ExampleDTO> Select()
    {
        return from e in db.vw_Example
                   select new ExampleDTO()
                   {    
                       ExampleID = e.ExampleID,
                       ExampleUDCs =  (from eudc in db.ExampleUDCs
                                      where eudc.ExampleID == id
                                      select new ExampleUDCDTO()
                                      {
                                           ExampleID = eudc.ExampleID
                                           //etc
                                      })


                   };
    }

如果您想查看它,这里是我的 ExampleDTO 类中的 ExampleUDCs 声明:

public IEnumerable<ExampleUDCDTO> ExampleUDCs { get; set; }

有谁知道我可以解决这个问题以重用我的ExampleUDCDTO().Select(int id)方法中的代码,而不是将所有查询放入第一个Select()方法中?

如果您需要更多信息,请告诉我。谢谢你。

4

1 回答 1

1

Entity Framework 使用表达式,它尝试将完整的表达式编译成一段 SQL。由于您正在创建一个包含方法调用的表达式,因此 EF 也会尝试将该方法调用编译到 SQL 中。这是不可能的。

于 2013-10-31T14:58:55.760 回答