我正在使用Entity Framework Core(2.0),我有以下疑问。
我不确定当我这样做时会发生什么:
context.Customers.Where(c => MyCustomMethod(c));
bool MyCustomMethod(Customer c)
{
return c.Name.StartsWith("Something");
}
它是否可以毫无问题地转换为SQL?
与写作不同:
context.Customers.Where(c => c.StartsWith("Something"));
简而言之,我能否在方法中包含Where clase的验证?它是否会破坏对SQL的翻译?
答案 0 :(得分:4)
不,您无法在EF LINQ查询中调用自定义方法,因为EF无法生成方法的表达式树,因此无法将其转换为SQL。
有关表达式树的更多信息,请参阅以下链接 -
https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/expression-trees/
答案 1 :(得分:3)
如果你需要从方法中获取字符串,你可以像这样编写相同的查询
from customer in contetx.Customer
let str = GetString()
where Name.Any(c=> c.StartsWith(str) )
select customer;
string GetString()
{
return "Something";
}
我知道这很有帮助,但这可以实现