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

Posted

技术标签:

【中文标题】无法将 lambda 表达式转换为“字符串”类型,因为它不是委托类型 [重复]【英文标题】:Cannot convert lambda expression to type 'string' because it is not a delegate type [duplicate] 【发布时间】: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 属性的详细信息? ***.com/questions/2058487/… 也许这会有所帮助? 你错过了using System.Linq;吗? 【参考方案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()

以上是关于无法将 lambda 表达式转换为“字符串”类型,因为它不是委托类型 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET、Kendo UI、CS1660:无法将 lambda 表达式转换为类型“字符串”

无法将 lambda 表达式 转换为类型“System.Delegate”,因为它不是委托类型

如果不首先将 lambda 表达式转换为委托或表达式树类型,则无法将 lambda 表达式用作动态分派操作的参数

错误:无法将 lambda 表达式转换为类型“bool”,因为它不是 Kendo Chart 中的委托类型

无法将lambda表达式转换为类型object因为他不是委托怎么解决

如何使用 lambda 表达式将 DataTable 记录添加到列表中? [复制]