【问题标题】:Type Conversion error in LINQLINQ 中的类型转换错误
【发布时间】:2013-04-01 03:12:26
【问题描述】:

我正在尝试仅使用 LinqPad 将存储的 Proc 转换为 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);   
}

但它在 else 块中的选择行出现以下错误

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

谁能知道发生了什么?如何解决?如何在 Linq 中显式转换类型?

两个表中的列不同。而且我没有使用实体框架等任何框架。我只有应用程序的数据库,我正在尝试将所有存储过程转换为 LINQ。在存储过程中,两个值都被捕获在同一个变量中,这就是为什么我需要它们在同一个变量中。那么在这种情况下有可能吗?

【问题讨论】:

  • 看起来很明显,您使用相同的变量来引用两个不兼容的类型。 var 不是动态的。修复 that 很容易,为第二个查询声明一个不同的变量。但是完全解决您的问题需要了解您打算做什么。
  • 感谢您的评论,但我正在尝试将 Stored Proc 转换为 Linq,因为这两个值都在同一个变量中。

标签: sql linq stored-procedures


【解决方案1】:

您的查询返回不同的对象,因此您不能将它们分配给同一个变量。

您可以指定要从两个查询中获取哪些属性,如果它们相同,它可以工作:

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);
}

【讨论】:

  • 感谢您的快速回答,但我可以将它们都转换为一种通用类型吗?或者有什么解决方法吗?因为我需要它们在同一个变量中。
  • 您可以尝试为两者找到共同的基类并使用它,但是您必须显式声明您的变量类型(没有var)。
  • @user2262332,如果您的 Employee 和 Student 都继承自基类(例如 Person),那么您可以将 myVar 声明为 IEnumerable&lt;Person&gt; myVar 而不是 var myVar
  • 两个表中的列不同。我没有使用任何框架,如实体框架等。我只有应用程序的数据库,我正在尝试将所有 SP 转换为 LINQ。那么在这种情况下有可能吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-02
  • 2018-12-16
  • 1970-01-01
相关资源
最近更新 更多