2010-10-04 6 views
1

Я пытаюсь придумать, составленный запрос с использованием Entity SQL, и я получаю эту ошибку на ToList() линии:Составитель Entity SQL запрос и OrderBy

LINQ к Entities не распознает «System метод. Data.Objects.ObjectQuery`1 [BLL.Company] OrderBy (System.String, System.Data.Objects.ObjectParameter []) ', и этот метод не может быть переведен в выражение хранилища.

Вот код, который я пытаюсь:

class param 
{ 
    public string where, orderby; 
    public int skip, take; 

} 

.. 

public class BLL.CompanyManager 
{ 
    private static readonly Func<DbContext, param, IQueryable<CompanyInfo>> companyList; 

    static MyClass() 
    { 
     companyList = CompiledQuery.Compile<DbContext, param, IQueryable<CompanyInfo>>(
         (DbContext db, param p) => 
          db.Companies.Include("Projects") 
          //.Where(p.where) 
          .OrderBy(p.orderby) 
          .Skip(p.skip) 
          .Take(p.take) 
          .Select(row => new CompanyInfo() 
          { 
       ... 
          }) 
        ); 

     public static List<CompanyInfo> CompanyList(..) 
     { 
      ... 
      List<CompanyInfo> list = new List<CompanyInfo>(); 
      using (var db = (DbContext.Instance()) 
      { 
       list.AddRange(companyList(db, params).ToList<CompanyInfo>()); // <== ERROR 
      } 
      return list; 
     } 
    } 
} 

ответ

0

Как он говорит, вы не можете использовать метод построителя запроса в запросе L2E. Различие тонкое, потому что они выглядят одинаково, но построитель запросов и L2E - это не одно и то же.

+0

Означает ли это, что я не могу скомпилировать запросы ObjectQuery? Или есть способ? Я хотел использовать динамическую сортировку и подкачку без использования деревьев выражений и их предварительной компиляции. Разве я не могу сделать то и другое? – dstr

+1

Уверен, что вы можете скомпилировать 'ObjectQuery'. Вы просто не можете скомпилировать выражение с помощью методов Query Builder. Вы также не можете скомпилировать «динамический» запрос. Думаю об этом; это противоречие в терминах! Скомпилированные запросы могут варьироваться только по параметрам, а не по синтаксису. –

Смежные вопросы