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

时间:2013-10-05 11:51:04

标签: c# asp.net linq lambda

我正在使用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'类型,因为它不是委托类型

5 个答案:

答案 0 :(得分:254)

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

并将using System.Data.Entity;添加到代码

答案 1 :(得分:94)

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

答案 2 :(得分:12)

我的情况解决了我正在使用

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

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

将解决它

答案 3 :(得分:4)

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

看看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名称'价值'在当前上下文中不存在

修复"价值"变量错误和其他错误也将消失。

答案 4 :(得分:3)

对于那些现在磕磕绊绊的人,我解决了这种类型的错误,该错误与所有引用一起抛出并正确放置了使用的语句。在一个返回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%确定原因,但是如果有人对此类错误感到沮丧,请尝试一下。