मुझे लगता है कि कुछ अंतर है। मुझे प्रश्न के रूप में उदाहरण का उपयोग करने दें। मान लें मैं करना चाहता हूँ एक User.FirstName और User.LastName (उपयोगकर्ता तालिका अधिक क्षेत्रों है)
Method1 के आधार पर किसी भी: UsersContext.Users.Any(u => u.FirstName.ToLower() == userObj.FirstName && u.LastName.ToLower() == userObj.LastName);
Method2: (UsersContext.Set(typeof(User)) as IQueryable<User>).Any(u => u.FirstName.ToLower() == userObj.FirstName && u.LastName.ToLower() == userObj.LastName);
मैं एसक्यूएल प्रोफाइलर में जाँच क्वेरी निकाल दिया Method1 में है:
exec sp_executesql N'SELECT
CASE WHEN (EXISTS (SELECT
1 AS [C1]
FROM [dbo].[User] AS [Extent1]
WHERE (((LOWER([Extent1].[FirstName])) = (LOWER(@p__linq__0))) AND ((LOWER([Extent1].[LastName])) = @p__linq__1)
)) THEN cast(1 as bit) WHEN (NOT EXISTS (SELECT
1 AS [C1]
FROM [dbo].[User] AS [Extent2]
WHERE (((LOWER([Extent2].[FirstName])) = (LOWER(@p__linq__0))) AND ([Extent2].[LastName] = @p__linq__1)
)) THEN cast(0 as bit) END AS [C1]
FROM (SELECT 1 AS X) AS [SingleRowTable1]',@p__linq__0 nvarchar(4000),@p__linq__1 nvarchar(4000)',@p__linq__0=N'jack',@p__linq__1=N'saw'
Method2 से:
SELECT
[Extent1].[Id] AS [Id],
[Extent1].[FirstName] AS [FirstName],
[Extent1].[LastName] AS [LastName],
[Extent1].[Email] AS [Email],
.......other fields......
FROM [dbo].[Users] AS [Extent1]
तालिका में 40000 रिकॉर्ड हैं और विधि 1 में लगभग 20 एमएस लगते हैं जबकि विधि 2 में 3500 एमएस लगता है।
@abatishchev http://msdn.microsoft.com/en-us/library/gg696521(v=vs.103).aspx नहीं वहाँ एक सेट विधि –
Dismissile
ज़रूर, धन्यवाद, मुझे मूर्ख :) – abatishchev