LINQ to Entities Where子句与自定义方法

时间:2017-10-04 09:10:35

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

我正在使用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的翻译?

2 个答案:

答案 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";
}

我知道这很有帮助,但这可以实现