这是一个相当讨厌的连接,但我在 Entity Framework 中使用类似的数据进行了一些测试,并得出了一些你可以在你的数据上进行测试的东西。
它用于string.Substring
从字符串操作数中获取第一个字符,然后使用仅 EF 方法SqlFunctions.StringConvert
(这些方法在 System.Data.Objects.SqlClient 中找到)与强制转换为double
1的组合,最后是整数操作数的string.Trim
2 .
我已经对此进行了测试,并确认至少在 EF 4 中支持所有功能。问题中提出或推荐的其他几种方法不起作用,因为实体框架不知道如何将它们转换为适当的 SQL 等价物。
join f in ent.FTypes
on c.CourseID.Substring(0, 1)
equals SqlFunctions.StringConvert((double)f.FTypeID).Trim()
它生成如下所示的 SQL 连接:
INNER JOIN [dbo].[FTypes] AS [Extent2]
ON ((SUBSTRING([Extent1].[CourseID], 0 + 1, 1)) = (LTRIM(RTRIM(STR( CAST( [Extent2].[FTypeID] AS float))))))
OR ((SUBSTRING([Extent1].[CourseID], 0 + 1, 1) IS NULL) AND (LTRIM(RTRIM(STR( CAST( [Extent2].[FTypeID] AS float)))) IS NULL))
因此,基于此,您可能需要根据需要进行一些额外的过滤。
试一试,看看是否有助于解决问题。
1强制转换为 double 是必要SqlFunctions.StringConvert
的,因为整数没有重载,也没有其他单一的最佳匹配,所以我强制一个。
2结果字符串需要修剪,因为字符串转换会产生一些多余的填充。