Entity framework EF.Functions.Like vs string.Contains

后端 未结 2 822
小蘑菇
小蘑菇 2020-12-02 22:22

I was reading the announcement of entity framework core 2.0 https://blogs.msdn.microsoft.com/dotnet/2017/08/14/announcing-entity-framework-core-2-0/

It says that the

相关标签:
2条回答
  • 2020-12-02 22:30

    Like query supports wildcard characters and hence very useful compared to the string extension methods in some scenarios.

    For ex: If we were to search all the 4 lettered names with 'ri' as the middle characters we could do EF.Functions.Like(c.Name, "_ri_");

    or to get all the customers from cities which start with vowels:

    var customers = from c in context.Customers 
                       where EF.Functions.Like(c.City, "[aeiou]%")
                       select c;
    

    (Please read @Tseng's answer on how they are translated differently into SQL queries)

    0 讨论(0)
  • 2020-12-02 22:44

    The answer of @adiga is quite incomplete and covers just a part of the differences in usage.

    However, .StartsWith(...), .Contains(...) and .EndsWith(...) are also translated differently into SQL then EF.Functions.Like.

    For example .StartsWith gets translated as (string LIKE pattern + "%" AND CHARINDEX(pattern, string) = 1) OR pattern = '' where .Contains gets translated into (CHARINDEX(pattern, string) > 0) OR pattern = ''.

    EF.Functions.Like however gets translated into string LIKE pattern [ESCAPE escapeChar].

    This may also have implications on Performance. The above is valid for EF Core SqlServer provider. Other EF Core providers may translate it differently.

    0 讨论(0)
提交回复
热议问题