LINQ to Entities中使用自定义方法的Where子句

3

我正在使用Entity Framework Core(2.0),并且有以下疑问。

当我执行以下操作时,我不确定会发生什么:

context.Customers.Where(c => MyCustomMethod(c));

bool MyCustomMethod(Customer c) 
{
    return c.Name.StartsWith("Something");
}

它是否可以顺利转换成SQL语句?

与手写SQL相比,有何不同?

context.Customers.Where(c => c.StartsWith("Something"));

简而言之,我能否将我的Where子句验证包装在一个方法中?这会破坏对SQL的转换吗?

1
你试过了吗?结果怎么样? - Flater
3
这行代码无法运行,因为 EF 不知道如何处理你的 MyCustomMethod。 - DavidG
1
我认为你不能在where和do process内部这样调用,这种情况下Ef是盲目的。 - Shiwanka Chathuranga
2个回答

7
不可以在EF LINQ查询中调用自定义方法,因为EF无法生成该方法的表达式树,因此无法将其转换为SQL。
有关表达式树的更多信息,请参见链接

2
如果您需要从方法中获取字符串,可以编写类似以下的查询。
from customer in contetx.Customer 
                let str = GetString()
                where Name.Any(c=> c.StartsWith(str) )
                select customer;

string GetString() 
{
    return "Something";
}

我不知道这是否有帮助,但这可以实现。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接