2013-05-19 69 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

相關問題