, , SQL - . , 5+ , EF .Contains()
, :
string commaDelmitedList = string.Join(",", accountIdList);
return context.GetAccountsByList(commaDelmitedList).ToList();
StoredProcedure () :
SELECT *
FROM Accounts as T1 WITH (NOLOCK)
INNER JOIN (
SELECT Num FROM dbo.StringToNumSet(@commaDelimitedAccountIds, ',')
) as [T2] ON [T1].[AccountId] = [T2].[num]
User-Defined dbo.StringToNumSet() :
CREATE FUNCTION [dbo].[StringToNumSet] (
@TargetString varchar(MAX),
@SearchChar varchar(1)
)
RETURNS @Set TABLE (
num int not null
)
AS
BEGIN
DECLARE @SearchCharPos int, @LastSearchCharPos int
SET @SearchCharPos = 0
WHILE 1=1
BEGIN
SET @LastSearchCharPos = @SearchCharPos
SET @SearchCharPos = CHARINDEX( @SearchChar, @TargetString, @SearchCharPos + 1 )
IF @SearchCharPos = 0
BEGIN
INSERT @Set( num ) VALUES ( SUBSTRING( @TargetString, @LastSearchCharPos + 1, DATALENGTH( @TargetString ) ) )
BREAK
END
ELSE
INSERT @Set( num ) VALUES ( SUBSTRING( @TargetString, @LastSearchCharPos + 1, @SearchCharPos - @LastSearchCharPos - 1 ) )
END
RETURN
END