2016-12-16 78 views
3

我想使用Union和我的變量類型是十進制。我得到以下異常:匿名類型錯誤使用聯盟

實例參數:無法從 'System.Linq.IQueryable<AnonymousType#1>' 轉換爲 'System.Linq.ParalelQuery<AnonymousType#2>'


和代碼:

queryResults = (from lI in Entities.LI 
       select new { lI, lI.abc }) 
       .Union(from lI in Entities.LI 
          from R in Entities.RL 
          where lI.oid == R.lIOid 
          select new { lI, R.Quantity }); 
+0

您選擇(從下面的2答案)答案將取決於什麼ABC的類型。 – Joe

回答

3

您可以根據Union兩個匿名類型,只要它們的類型是相同的。這包括字段名稱。在你的情況下,第一種類型是{lI, abc},第二種是{lI, Quantity},所以合併它們將不起作用。你需要決定一個名字, - Quantity,abc,或者完全不同的東西。

給予這兩個領域相同的名稱將解決這個問題,假設它們的類型已經是相同的:

queryResults = (from lI in Entities.LI 
      select new { lI, Quantity = lI.abc }) // <<== Added "Quantity =" 
      .Union(from lI in Entities.LI 
         from R in Entities.RL 
         where lI.oid == R.lIOid 
         select new { lI, R.Quantity }); 
+1

謝謝你它正在工作:) – Ilaria

+0

@莓是的,這正是它的工作原理。謝謝! – dasblinkenlight

5

該錯誤消息告訴你到底是什麼問題。您不能將一個匿名類型轉換爲另一個。

你有這個作爲你的第一個select語句:

select new { lI, lI.abc } 

,並以此作爲你的第二個:

select new { lI, R.Quantity } 

這些都是產生兩個不同的對象,第一有什麼lI是外加一個字符串。第二個有'lI`和一個數字值。

試試這個:

select new { lI, lI.abc, 0 } 

和:

select new { lI, "", R.Quantity } 
+0

如果數據類型相同,它不會工作嗎?在http://stackoverflow.com/questions/16947761/create-a-new-anonymous-type-list-to-union-onto-existing-anonymous-type-list? – stuartd

+1

@stuartd,是的,它應該。我只是添加一個可能的解決方案。 – ChrisF