无法将 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 中的委托类型