2013-04-09 59 views
1

我試圖將存儲的Proc轉換爲僅使用LinqPad的LINQ。我在LINQ的LINQ中的類型轉換錯誤

var myVar = (from st in Student 
      where st.name == "abcd" 
      select st).Take(10); 

if (myVar.Any()) 
{ 
// some statements 
} 
else 
{ 
    myVar = (from emp in Employee 
      where emp.name == "abcd" 
      select emp).Take(10); 
} 

下面的代碼,但它是在選擇線路中的其他塊給下面的錯誤

Cannot implicitly convert type 'System.Linq.IQueryable<AnonymousType#1>' to 'System.Linq.IQueryable<AnonymousType#2>' 

誰能知道發生了什麼事?如何解決它?我如何顯式轉換Linq中的類型?

這兩個表中的列是不同的。而且我沒有使用像實體框架等任何框架。我只有應用程序的數據庫,並且我試圖將所有Stored Proc轉換爲LINQ。而在Stored Proc中,兩個值都被捕獲在同一個變量中,這就是爲什麼我需要它們在同一個變量中。那麼在這種情況下可能嗎?

+0

看起來相當明顯類型。 'var'不是動態的。修復*很容易,爲第二個查詢聲明一個不同的變量。但完全解決你的問題需要了解你打算做什麼。 – 2013-04-09 15:36:30

+0

感謝您的評論,但我正在嘗試將Stored Proc轉換爲Linq,因爲兩個值都採用相同的變量。 – Faiyaz 2013-04-09 16:05:47

回答

3

您查詢返回不同的對象,因此您不能將它們分配給相同的變量。

你可以指定你想從兩個查詢採取哪些屬性,如果它們是同它可以工作:,你使用相同的變量指兩個不兼容的

var myVar = (from st in Student 
      where st.name == "abcd" 
      select new 
      { 
       st.name, 
       st.age 
      }).Take(10); 

if (myVar.Any()) 
{ 
// some statements 
} 
else 
{ 
    myVar = (from emp in Employee 
      where emp.name == "abcd" 
      select new 
      { 
       emp.name, 
       emp.age 
      }).Take(10); 
} 
+0

感謝您的快速回答,但我可以將它們都轉換爲一種泛型?或者是否有任何解決方法?因爲我需要他們在同一個變量。 – Faiyaz 2013-04-09 15:40:03

+0

您可以嘗試爲兩者找到共同的基類並使用它,但是您必須顯式聲明變量類型(不帶'var')。 – MarcinJuraszek 2013-04-09 15:41:06

+0

@ user2262332,如果你的員工和學生都從基類(人,例如)繼承,那麼你可以聲明myVar的作爲'IEnumerable的myVar'的代替'變種myVar' – valverij 2013-04-09 15:42:03