2012-06-25 65 views
5

列名稱和類型相同,但它來自兩個單獨的實體。下面是一個簡單的例子:使用LINQ將不同類型的兩個IQueryable變量連接在一起

--Query View 
var v_res = from s in db.V_CMUCUSTOMER 
      select s; 

--Values from table less values from view 
var res = from s in db.CMUCUSTOMERs 
      where !(from v in v_res 
      select v.ID).Contains(s.ID) 
     select s; 

--join table and view values into one variable 
var res_v_res = (from c in res 
      select c).Union(from v in v_res 
      select v); 

我得到不過以下錯誤:

實例參數:無法從「System.Linq.IQueryable」轉換爲System.Linq.ParallelQuery

+2

我敢打賭,如果你停止使用'var',答案會很清楚。通過讓編譯器選擇v_res和res的類型,您可以選擇其中的選項。 –

+1

請詳細說明。 – stats101

+0

編譯器可以爲這些變量之一選擇一個意外的類型,然後它可以根據該選項(System.Linq.Enumerable.Union,System.Linq.Queryable.Union命名兩個可能性)在Union的不同實現之間進行選擇。 。相反,如果你指定了類型,那麼編譯器會在你要求不可能的時候告訴你。 –

回答

0

如果你指定一個新的匿名類型和使用ToList()兩種,那麼你應該能夠聯合它們如下:

var v_res = (from s in db.V_CMUCUSTOMER 
      select new { custName = s.customer_name custAddress = s.address}).ToList(); 

--Values from table less values from view 
var res = (from s in db.CMUCUSTOMERs 
      where !(from v in v_res 
      select v.ID).Contains(s.ID) 
      select new { custName = s.customer_name custAddress = s.address }).ToList(); 

--join table and view values into one variable 
var res_v_res = v_res.Union(res); 

如果有幾十列,但應該還是工作,這可能是麻煩。

0

當我運行在LINQPad中有類似的查詢,我收到一條錯誤消息,聲稱在Contains(s.ID)中的s未在此上下文中定義。

如果我將&&替換爲where所有查詢都成功執行。

相關問題