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

Kei*_*ows 72 .net c# lambda entity-framework

我在基于C#的代码中使用Entity Framework.我遇到了意想不到的怪异,正在寻找建议.

案例1,2,3,4 ......项目:
RivWorks.dll
RivWorks.Service.dll
RivWorks.Alpha.dll

样本(所有这些工作):
RivWorks.Alpha.dll:

public static bool EndNegotitation(long ProductID)
{
    var product = (from a in _dbFeed.AutoWithImage 
                   where a.AutoID == ProductID select a).FirstOrDefault();
...
}
Run Code Online (Sandbox Code Playgroud)

RivWorks.Service.dll

public static RivWorks.Model.NegotiationAutos.AutoWithImage 
    GetProductById(long productId)
{
    var myProduct = from a in _dbFeed.AutoWithImage 
                    where a.AutoID == productId select a;

    return myProduct.FirstOrDefault();
}
public static List<RivWorks.Model.NegotiationAutos.AutoWithImage> 
    GetProductByCompany(Guid companyId)
{
    var myProduct = from a in _dbFeed.AutoWithImage 
                    where a.CompanyID == companyId select a;

    return myProduct.ToList();
}
Run Code Online (Sandbox Code Playgroud)

等等

案例"怪异":
RivWorks.Web.Service.dll(WCF项目)
包含与其他项目相同的引用.

public NegotiateSetup GetSetup(string method, string jsonInput)
{
    ...
    long.TryParse(ProductID, out result);
    var product = (from a in _dbFeed.AutoWithImage 
                   where a.AutoID == result select a).FirstOrDefault();
    ...
}
Run Code Online (Sandbox Code Playgroud)

我得到这个编译时错误(在我的编辑器中突出显示"where"一词):
无法将lambda表达式转换为类型'string',因为它不是委托类型

任何想法会导致什么?

Kei*_*ows 111

对于那些对结果感兴趣的人:
我在代码的头部缺少一个简单的Using语句.

using System.Linq;
Run Code Online (Sandbox Code Playgroud)

这修正了它.

  • 我很惊讶VS和ReSharper都没有足够智能来检测这种情况.谢天谢地,SO比两者都聪明. (13认同)
  • 我得到了相同的错误消息,我有(并且"总是有")使用System.LINQ.当然,其中一个模型成员将数据类型从string []更改为string ... (2认同)

Mig*_*nte 99

在我的情况下,它失踪了

using System.Data.Entity;


Dor*_*oto 11

using System.Linq;
using System.Data.Entity;
Run Code Online (Sandbox Code Playgroud)


jha*_*amm 7

在我的情况下,我有

Using System.Linq;
Run Code Online (Sandbox Code Playgroud)

但我在where子句项目之后错过了&&.

坏代码:

item.Group.ID == grp.ID
p.Product_Status_Flag == 1 &&
item.Valid
Run Code Online (Sandbox Code Playgroud)

正确的代码(没有错误):

item.Group.ID == grp.ID && // <- This was missing and I didn't see it right away.
p.Product_Status_Flag == 1 &&
item.Valid
Run Code Online (Sandbox Code Playgroud)

我希望这能节省一些时间.


Chr*_*ris 7

我在Razor视图中的Telerik网格模板中苦苦挣扎了大约一个小时.就我而言,这个:

columns.Bound(x => x.ID).Template(@<text><a href="@(Model.AppUrl + AdditionalFeeTypes/Details/" + item.ID)">@item.ID</a></text>);
Run Code Online (Sandbox Code Playgroud)

应该是这样的:

columns.Bound(x => x.Id).Template(@<text><a href="@(Model.AppUrl + AdditionalFeeTypes/Details/" + item.Id)">@item.Id</a></text>);
Run Code Online (Sandbox Code Playgroud)

"Id"的案例错了!我希望这可以帮助别人.您可能因为放置了不存在的属性而收到此错误!