String将Linq中的错误转换为实体连接语句 - 此函数只能从LINQ实体调用

时间:2012-08-05 11:53:44

标签: c# asp.net entity-framework-4 linq-to-entities

我试图在2个表之间编写一个ling 2实体左连接查询,其中连接列在表中具有不同的数据类型。因此,我使用new关键字使用SqlFunctions.StringConvert()函数执行字符串转换。

但是这会抛出一个错误,说“只能从LINQ到实体调用此函数。”

sql查询看起来像这样......

select distinct j.jobid from jobs j
left join jobfilters jf
on j.jobid = jf.jobid 
left join vwbranchmaster bm
on bm.branchid = jf.jobfilterkey 

在此查询中,bm.branchid是int,jobfilterkey是nvarchar。不幸的是,Branchmaster位于外部数据库中,因此我们无法修改数据库列。

L2E查询如下所示(请注意dt是DataTable转换为Enumerable类型)

from J in dt
join JFBRegion in JobFilter on J.Field<Guid>("JobId") equals JFBRegion.JobID into JFBRegion_join
from JFBRJ in JFBRegion_join.DefaultIfEmpty()
join BRMAS in BranchMaster on new { JobFilterKey = JFBRJ.JobFilterKey } equals new { JobFilterKey = SqlFunctions.StringConvert((decimal)BRMAS.BranchID) } into BMASJF_join
from BMASJF in BMASJF_join.DefaultIfEmpty()

请让我知道我在这里做错了什么,或者是否可以这样做。

感谢。

1 个答案:

答案 0 :(得分:3)

如果您在DataTable上执行此查询,那么这不是Linq To Entities,因为您在.NET内存中执行。您需要使用Entity Framework上下文执行查询。