2013-04-09 84 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