我在基于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();
...
}
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();
}
等
案件“古怪”:
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();
...
}
我收到此编译时错误(在我的编辑器中突出显示“where”一词):
无法将lambda表达式转换为'string'类型,因为它不是委托类型
任何想法会导致什么?
答案 0 :(得分:111)
对于那些对结果感兴趣的人:
我在代码的头部缺少一个简单的Using语句。
using System.Linq;
这解决了它。
答案 1 :(得分:94)
在我的情况下它缺少
using System.Data.Entity;
答案 2 :(得分:9)
using System.Linq;
using System.Data.Entity;
答案 3 :(得分:7)
就我而言,我有
Using System.Linq;
但我错过了&amp;&amp;在where子句项目之后。
错误代码:
item.Group.ID == grp.ID
p.Product_Status_Flag == 1 &&
item.Valid
纠正代码(没有错误):
item.Group.ID == grp.ID && // <- This was missing and I didn't see it right away.
p.Product_Status_Flag == 1 &&
item.Valid
我希望能节省一些时间。
答案 4 :(得分:7)
我在Razor视图中的Telerik Grid模板中苦苦挣扎了大约一个小时。就我而言,这个:
columns.Bound(x => x.ID).Template(@<text><a href="@(Model.AppUrl + AdditionalFeeTypes/Details/" + item.ID)">@item.ID</a></text>);
应该是这样的:
columns.Bound(x => x.Id).Template(@<text><a href="@(Model.AppUrl + AdditionalFeeTypes/Details/" + item.Id)">@item.Id</a></text>);
“Id”的案例错了!我希望这可以帮助别人。您可能因为放置了一个不存在的属性而收到此错误!
答案 5 :(得分:2)
我偶然发现了这个并发现了另一种解决方法。我正在使用var query = context.Contacts.Where(c => c.FullNameReverse == "TingTong");
并得到上述错误。错误是我使用方法FullNameReverse()
作为属性FullNameReverse
。错过了()!!!
答案 6 :(得分:1)
我有同样的问题与mvc 3 razor也许有人有相同所以我想展示如何在我的stuation中解决它
List<Taksit> lst = db.Taksit.Where(y => y.OgrenciId.Equals(Convert.ToInt32( list[0].Id))).ToList();
我试图使用contains但因此OgrenciId是int我得到这里提到的错误所以通过使用equals问题解决了
答案 7 :(得分:1)
线程有点旧,但我只是遇到了这个问题,并且'网上没有任何内容是答案。一个站点提到了导致答案的原因,这是一个数据类型问题,但遗憾的是我再也找不到了,所以我在这里发布我的解决方案。也许一些未来的搜索者会从中获益。
原文:IQueryable test = from r in Records其中r.Record_ID == 100选择r;
其中Records是由先前LINQ expresson产生的IQueryable。
修复方法是在表达式中投射记录:(IQueryable&lt; record&gt;)记录。找到它之后,它就变得非常有意义了。记录未输入,因此如果r.Record_ID有效,则LINQ不知道。混淆是错误信息,它出现在几十个地方的网络上,几乎在所有情况下解决方案都是缺少的两个使用条款中的一个。我发现这一两个不是一个使用问题,他们没有费心去发布修复它的内容。
希望这会有所帮助......
答案 8 :(得分:0)
我遇到类似的问题,将列绑定到Telerik MVC Grid。 我在ViewModel类上有一个Id属性。 (灵感来自Chris上面的答案)我将它重命名为XxxId,问题就消失了。我似乎记得MVC为Id属性做了一些特别的事情。
答案 9 :(得分:0)
我有一个类似的问题,但使用Rx,在我的情况下添加
using System;
帮助。 FWIW
对于那些缺少的扩展方法,有时候太烦人了。
答案 10 :(得分:0)
在我的情况下,尝试在Sharepoint 2013应用程序中的clientContext.Load中使用Include时出现此错误。
我已经包含了Sharepoint客户端库,如下所示:
using SP = Microsoft.SharePoint.Client;
要修复,此外我还添加了它而没有命名空间:
using Microsoft.SharePoint.Client;
using SP = Microsoft.SharePoint.Client;
答案 11 :(得分:0)
我的问题涉及格式:
.Columns(columns => {
columns.Bound(p => p.Id).Filterable(false);
columns.Bound(p => p.Name).Width(250);
...
每一个p.无论有什么错误。
这是一个使用MVC的项目,我发现我的问题是在我的模型中对这些变量(Id,Name等)使用“public static int”或“public static string”。当我在所有模型变量上删除“静态”时,我不再收到错误。让我疯了大约一天......
答案 12 :(得分:0)
我在稍有不同的版本中遇到了这个问题 如果从lambda中调用(静态)方法,请检查其返回类型。如果返回类型应该是IEnumerable(使用lambdas时通常都是这样)但是返回对象,显然你有问题。
答案 13 :(得分:0)
对于 .Net Core ,只需进行介绍;
using System.Linq;
using Microsoft.EntityFrameworkCore;