无法将 lambda 表达式转换为类型 'string',因为它不是委托类型。

132

我正在使用类似以下的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 表达式转换为类型“string”,因为它不是委托类型


2
错误抛出在哪里? - Femaref
1
无法将 lambda 表达式转换为类型“string”,因为它不是委托类型。 - Deep Sharma
1
你能否给出关于 qryContent 类和 db.qryContents 属性的更多细节? - meilke
2
也许这个链接可以帮到你:https://dev59.com/gnI95IYBdhLWcg3w_zWs?rq=1 - Femaref
2
你是否缺少 using System.Linq; - Eli Arbel
显示剩余5条评论
5个回答

362

我认为您在此系统类中遗漏了using System.Linq;

并且需要将using System.Data.Entity;添加到代码中。


54
这一定是有史以来最愚蠢的事情了。不是清楚地说明你缺少引用,而是给你一个完全误导的错误消息。某人在微软不能编程。好吧,感谢修复。 - Liquid Core
1
我也可以运行。Visual Studio没有检测到这个缺失的using。 - gvd
19
System.Data.Entity; 这个帮了我,我正在使用 Include() 进行急加载。谢谢 :) - Jawand Singh
1
使用 System.Linq; 解决了我的问题。谢谢! - Yusril Maulidan Raji
花了很多时间来解决这个简单的问题。错误信息明显是误导性的。添加 using System.Linq 解决了这个问题。 - chindirala sampath kumar
显示剩余2条评论

99
在我的情况下,我必须添加 using System.Data.Entity;

3
谢谢!那样解决了我的问题 :) - Ortund
1
它对我起作用了 :) - ThomasSquall
1
我遇到了同样的问题,你的答案帮助我解决了它。谢谢。 - Laurence
2
@Ryan Kohn,我已经尝试了这里描述的所有解决方法,但是没有一个解决了我的问题。所以,请您看一下关于Kendo UI的问题:无法将lambda表达式转换为类型“string”,因为它不是委托类型?提前致谢。 - Jack
@H.Johnson 注意,我只是编辑了这个答案。skb 是原作者。另外,如果你的问题与问题描述不完全相同,可以考虑向社区提出一个新问题。 - Ryan Kohn
显示剩余3条评论

21

我的案子已经解决了,我使用的是

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

使用

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

会解决它


2
为什么你把这个作为答案发布了!当另一个答案被接受为正确答案时? - Hamad
22
@Hamad,人们在已有被接受的答案的问题下发表回答是完全可以的。这个回答提供了另一种情况,解释了OP报告的异常可能发生的原因,因此可以帮助其他遇到这个异常的人。 - BruceHill
3
这解决了我的问题!谢谢。 - Umpa
2
谢谢,非常感谢,这真的帮了我很多。 - ShrapNull
冷静点,@Hamad... - James Heffer

9
如果这与其他用户指定的缺失使用指令无关,则可能是查询存在其他问题而导致此错误。
请查看VS编译器错误列表: 例如,如果查询中的“Value”变量不存在,则会出现“lambda to string”错误以及另一个与未知/错误字段更相关的错误。在您的情况下可能是:
objContentLine = (from q in db.qryContents
                  where q.LineID == Value
                  orderby q.RowID descending
                  select q).FirstOrDefault();

错误:

错误 241:无法将 Lambda 表达式转换为类型“string”,因为它不是委托类型

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

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

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


5

对于刚刚遇到此问题的人,我解决了这种错误,即使所有引用和使用语句都放置正确。显然,在函数中代替已声明的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>();

我仍不确定为什么会出现这种错误,但如果有人对这种类型的错误感到沮丧,请尝试以下方法。

谢谢,这解决了我的情况。 - Alan Waage
这是我的迭代:dtSQLServers.AsEnumerable().Where(dr => dr["SourceSystem"].ToString() == "xxxxxxxxx").ToList() - ARLibertarian

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接