2013-05-19 37 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到实体是“无法创建类型的contstant值‘表2’

我能做到以下几点:

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

相关问题