有没有办法在实体框架查询的`Where`部分进行转换?

时间:2017-02-09 14:57:24

标签: c# entity-framework linq casting entity-framework-6

要明确,我不是指对EF电话的结果执行.Cast<T>

我试图在数字字段上实现部分搜索。

创建SQL脚本时,很容易将列转换为另一种数据类型:

SELECT Id
FROM Employees
WHERE CAST(Id AS VARCHAR) LIKE '%95%';

LINQ查询中是否有任何等价物?

我无法修改我查询的实体上的数据类型,而Id仅用于演示目的。

3 个答案:

答案 0 :(得分:4)

我不知道为什么ToString不起作用,但这对我有用。无需SqlFunctions:

false

答案 1 :(得分:3)

您可以使用SqlFunctions.StringConvert

var q = db.Employees
    .Where(emp => SqlFunctions.StringConvert((decimal) emp.Id).Contains("95"));

答案 2 :(得分:1)

如果您无法找到SqlFunctions解决方案,那么始终ExecuteQuery

var ids = db.ExecuteQuery<int>("SELECT Id FROM Employees WHERE CAST(Id AS VARCHAR) LIKE '%{0}%'", "95")

(这可能不完全正确参数。)