【问题标题】:Cannot convert lambda expression to type 'string' because it is not a delegate type [duplicate]无法将 lambda 表达式转换为“字符串”类型,因为它不是委托类型 [重复]
【发布时间】:2013-10-05 11:51:03
【问题描述】:

我正在使用这样的 LINQ lambda 表达式:

int Value = 1;
qryContent objContentLine;

using (Entities db = new Entities())
{
    objContentLine = (from q in db.qryContents
                      where q.LineID == Value
                      orderby q.RowID descending
                      select q).FirstOrDefault();
}

但是,我收到以下错误:

无法将 lambda 表达式转换为类型“字符串”,因为它不是委托类型

【问题讨论】:

  • 哪里抛出的错误?
  • 无法将 lambda 表达式转换为类型“字符串”,因为它不是委托类型
  • 您能否提供更多有关qryContent 类和db.qryContents 属性的详细信息?
  • stackoverflow.com/questions/2058487/… 也许这会有所帮助?
  • 你错过了using System.Linq;吗?

标签: c# asp.net linq lambda


【解决方案1】:

我认为您在这个系统类中缺少using System.Linq;

并在代码中添加using System.Data.Entity;

【讨论】:

  • 这一定是最愚蠢的事情了。给你一个完全误导的错误信息,而不是清楚地说明你错过了一个参考。有人不能在微软编程。好的,谢谢你的修复
  • 也适合我。 Visual Studio 使用时未检测到此缺失。
  • System.Data.Entity; 这对我有帮助,我使用 Include() 进行急切加载。谢谢:)
  • using System.Linq; 解决了我的问题。谢谢!
  • 我实际上在几分钟前遇到了这个问题,并且我使用了 System.Linq 和 System.Data.Entity。我必须删除它们,运行失败的构建,然后将它们读入文件。然后它起作用了。
【解决方案2】:

就我而言,我必须添加using System.Data.Entity;

【讨论】:

  • 谢谢!这让我明白了:)
  • 它对我有用:)
  • 遇到了同样的问题,您的回答帮助我解决了这个问题。谢谢。
  • @Ryan Kohn 我已经应用了这里描述的所有解决方法,但没有一个没有解决我的问题。那么,您能否看一下 Kendo UI 上的描述:Cannot convert lambda expression to type 'string' because it is not a delegate type?提前致谢。
  • @H.Johnson 请注意,我只编辑了这个答案。 skb 是原作者。另一方面,如果您的问题与问题中描述的不同,您可以考虑向社区提出一个新问题。
【解决方案3】:

我的案例它解决了我正在使用

@Html.DropDownList(model => model.TypeId ...)  

使用

@Html.DropDownListFor(model => model.TypeId ...) 

会解决的

【讨论】:

  • 你为什么把这个作为答案发布!何时接受不同的答案作为正确答案?
  • @Hamad 人们可以发布已经接受答案的问题的答案。这个答案确实给出了另一种情况,即 OP 报告的异常可能发生,因此可以帮助其他遇到此异常的人。
  • 这解决了我的问题!谢谢。
  • 谢谢,非常感谢,这对我很有帮助
  • 冷静@Hamad...
【解决方案4】:

如果它与缺少其他用户声明的 using 指令无关,如果您的查询存在其他问题,也会发生这种情况。

查看 VS 编译器错误列表: 例如,如果查询中的“Value”变量不存在,则会出现“lambda to string”错误,以及与未知/错误字段相关的一些错误。

你的情况可能是:

objContentLine = (from q in db.qryContents
                  where q.LineID == Value
                  orderby q.RowID descending
                  select q).FirstOrDefault();

错误:

错误 241 无法将 lambda 表达式转换为类型“字符串”,因为它不是委托类型

错误 242 委托 'System.Func<..>' 不接受 1 个参数

错误 243 当前上下文中不存在名称“值”

修复“Value”变量错误,其他错误也会消失。

【讨论】:

    【解决方案5】:

    对于刚刚偶然发现此问题的人,我解决了这种类型的错误,该错误在所有引用和 using 语句放置正确时引发。用一个返回 DataTable 而不是在声明的 DataTable 上调用它的函数进行替换,显然有些混淆。例如:

    这对我有用:

    DataTable dt = SomeObject.ReturnsDataTable();
    
    List<string> ls = dt.AsEnumerable().Select(dr => dr["name"].ToString()).ToList<string>();
    

    但这没有:

    List<string> ls = SomeObject.ReturnsDataTable().AsEnumerable().Select(dr => dr["name"].ToString()).ToList<string>();
    

    我仍然不能 100% 确定原因,但如果有人对此类错误感到沮丧,请尝试一下。

    【讨论】:

    • 谢谢,这解决了我的情况
    • 谢谢!这是我的迭代: dtSQLServers.AsEnumerable().Where(dr => dr["SourceSystem"].ToString() == "xxxxxxxxx").ToList()
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多