Преобразовать запрос SQL в запрос Linq? - PullRequest
0 голосов
/ 07 мая 2011

У меня есть SQL-запрос, и я хочу преобразовать его в запрос LINQ, помогите, пожалуйста!

SELECT TOP 10 UPER( C1.NAME) 
FROM CUSTOMER C1 WHERE C1.NAME LIKE 'A%' AND C1.ID NOT IN
(SELECT TOP 20 C2.ID FROM CUSTOMER C1 WHERE C1.NAME LIKE 'A%' ORDER BY C2.NAME) 
ORDER BY C1.NAME

ОБНОВЛЕНИЕ

SELECT TOP 10 UPPER( C1.NAME) 
FROM CUSTOMER C1 WHERE C1.NAME LIKE 'A%' AND C1.ID NOT IN
(SELECT TOP 20 C2.ID FROM CUSTOMER C2 WHERE C2.NAME LIKE 'A%' ORDER BY C2.NAME) 
ORDER BY C1.NAME

Объявлен класс Datacontext«дб».Извините за мой плохой английский!

Ответы [ 3 ]

3 голосов
/ 07 мая 2011

Мне это не кажется слишком сложным, если я не читаю это неправильно:

var query = from c in db.Customer
            where c.name.StartsWith("A")
            orderby c.name
            select c.name.ToUpper();

return query.Skip(20).Take(10).ToList();

Многие люди, кажется, переводят ваш SQL напрямую в LINQ, но похоже, что они 'отсутствует точка вашего составного запроса (и тот факт, что вы выбираете из той же таблицы тот же ORDER-BY).Метод Skip устраняет необходимость в части C1.ID NOT IN (SELECT TOP 20..., поэтому вы можете сделать все это в одном запросе LINQ.

Одно крошечное замечание: если ваша база данных нечувствительна к регистру (что, вероятно, так и есть),вам может нужно заменить where c.name.StartsWith("A") на where c.name.StartsWith("A", StringComparison. OrdinalIgnoreCase).Я не уверен в этом, хотя;Я бы попробовал это без StringComparison сначала.

1 голос
/ 07 мая 2011

Я думаю, что вы получили свой ответ, поэтому я хочу представить вам полезные инструменты, которые позволяют преобразовывать запросы SQL в запросы LINQ.Его LINQPad :

Ну, вам не нужно!LINQPad позволяет интерактивно запрашивать базы данных на современном языке запросов: LINQ.Прощайте с SQL Management Studio!

LINQPad поддерживает все в C # 4.0 и Framework 4.0:

LINQ to Objects
LINQ to SQL and Entity Framework
LINQ to XML
Parallel LINQ
0 голосов
/ 07 мая 2011
var result = (from o in db.Customer
             where SqlMethods.Like(o.Name, "A%")
             order by i.Name
             select o.Name.ToUpper()).Skip(20).Take(10);

Я думаю, что есть лучший способ сделать это, но это все мои усилия ...

: D

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