2013-05-19 3 views
1

У меня есть запрос linq к сущностям, с которыми у меня возникают проблемы.В этом контексте поддерживаются только примитивные типы или типы перечислений (в методе Linq Contains)

var query = (from q in dc.Table1 
       where (from a in dc.Table2 select a.TypeID).Contains(q.TypeID) 
       select q); 

Этот запрос действителен в Linq to SQL. Он должен производить SQL запрос следующим образом:

select * from Table1 where TypeID in (select TypeID from Table2) 

ошибка брошена предполагает, что Linq к Entities «Невозможно создать contstant значение типа„Table2“

я мог бы сделать следующее:

var typelist = (from q in dc.Table2 select q.TypeID).ToList(); 

var query = (from q in dc.Table1 
       where typelist.Contains(q.TypeID) 
       select q); 

но это будет производить 2 SQL запросов вместо 1:

select distinct TypeID from Table2; 
select * from Table1 where TypeID in (1,2,3,4,5,6..... etc......); 

Любые идеи

ответ

2

Я пытался с этим запросом, и она работала:

var result = (from appgroup in test.AppGroupThemes 
         where (from t in test.Themes 
          select t.Id 
          ).Contains(appgroup.ThemeId) 
         select appgroup).ToList(); 
     Console.WriteLine(result.Count); 
+0

Спасибо за ваш ответ. Вы правы. Я понял, что моя проблема связана не с инфраструктурой сущностей. Я использую BreezeJS, и Breeze EFContextProvider кажется реальной проблемой. – Nick