یک نکتهی تکمیلی: کدامیک از متدهای کار با رشتهها در سمت کلاینت پردازش میشوند و کدامها در سمت سرور؟
در مثالهای زیر، هر جائیکه قسمت where عبارت SQL حذف شده، یعنی Client-Side Evaluation رخ دادهاست:
- با اضافه شدن نوع مقایسه، محاسبهی سمت کلاینت رخ میدهد:
var test1 = context.Blogs .Where(blog => String.Compare(blog.Url, "A", StringComparison.Ordinal) > 0) .ToList(); // SELECT [blog].[BlogId], [blog].[Url] // FROM [Blogs] AS [blog]
var test2 = context.Blogs .Where(blog => String.Compare(blog.Url, "B") > 0) .ToList(); // SELECT [blog].[BlogId], [blog].[Url] // FROM [Blogs] AS [blog] // WHERE [blog].[Url] > N'B'
var test3 = context.Blogs .Where(blog => blog.Url.Equals("C", StringComparison.OrdinalIgnoreCase)) .ToList(); // SELECT [blog].[BlogId], [blog].[Url] // FROM [Blogs] AS [blog]
var test3_1 = context.Blogs .Where(blog => blog.Url.Equals("C_1")) .ToList(); // SELECT [blog].[BlogId], [blog].[Url] // FROM [Blogs] AS [blog] // WHERE [blog].[Url] = N'C_1'
var test4 = context.Blogs .Where(blog => blog.Url.StartsWith("D")) .ToList(); // SELECT [blog].[BlogId], [blog].[Url] // FROM [Blogs] AS [blog] // WHERE [blog].[Url] LIKE N'D' + N'%' AND (LEFT([blog].[Url], LEN(N'D')) = N'D')
var test5 = context.Blogs .Where(blog => EF.Functions.Like(blog.Url, "S_i%")) .ToList(); // SELECT [blog].[BlogId], [blog].[Url] // FROM [Blogs] AS [blog] // WHERE [blog].[Url] LIKE N'S_i%'
var test6 = context.Blogs .Where(blog => blog.Url.ToUpper() == "E") .ToList(); // SELECT [blog].[BlogId], [blog].[Url] // FROM [Blogs] AS [blog] // WHERE UPPER([blog].[Url]) = N'E'
var test7 = context.Blogs .Where(blog => blog.Url.ToUpperInvariant() == "F") .ToList(); // SELECT [blog].[BlogId], [blog].[Url] // FROM [Blogs] AS [blog]