c # linq запрос генерирует синтаксис "ESCAPE '~'" при переводе "StartsWith" в sql "LIKE" - PullRequest
0 голосов
/ 25 марта 2011

ор.у меня есть этот синтаксис linq ниже, который генерирует SQL ниже этого.база данных сервера sql, которая получает запрос, отклоняет добавленный linq "ESCAPE '~'".я все еще исследую, но любая перспектива приветствуется!

var rc = (
    from x in dc.Candidate
    join xs in dc.CandidateStatus on x.StatusId equals xs.CandidateStatusId
    join xss in dc.CandidateStatus on xs.SystemStatusId equals xss.CandidateStatusId
    where
        _active.Contains(xss.Code)
        && (x.NickName.StartsWith(startsWith) || x.FirstName.StartsWith(startsWith))
    orderby x.NickName, x.FirstName, x.LastName
    select new ListItem {
        Id = x.CandidateId,
        Label = FormatIndividual(x.LastName,x.FirstName,x.NickName)
    });
return rc.ToList<ListItem>();

SELECT [t0].[candid] AS [Id], [t0].[lastnm] AS [lastName], [t0].[firstnm] AS [firstName], [t0].[nicknm] AS [nickName]
FROM [ats].[cand] AS [t0]
INNER JOIN [ats].[candstatus] AS [t1] ON [t0].[statusid] = ([t1].[candstatusid])
INNER JOIN [ats].[candstatus] AS [t2] ON [t1].[sysstatid] = ([t2].[candstatusid])
WHERE ([t2].[code] IN (@p0, @p1, @p2)) AND (([t0].[nicknm] LIKE @p3 ESCAPE '~') OR ([t0].[firstnm] LIKE @p4 ESCAPE '~'))
ORDER BY [t0].[nicknm], [t0].[firstnm], [t0].[lastnm]

реализовано ниже.устранена необходимость в подстановочном знаке сервера sql ('%' - то есть то, что экранировалось).

        ...
        //&& (x.NickName.StartsWith(startsWith) || x.FirstName.StartsWith(startsWith))
        && (x.NickName.Substring(0,1).Equals(startsWith) || x.FirstName.Substring(0,1).Equals(startsWith))
        ...

1 Ответ

0 голосов
/ 25 марта 2011

http://msdn.microsoft.com/en-us/library/ms179859.aspx - См .: C. Использование предложения ESCAPE

Символ ~ используется в качестве escape-символа для значения в @p3.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...