В явном LINQ-to-SQL (C #) порядок имеет значение? - PullRequest
2 голосов
/ 14 апреля 2009

Я знаю, что Linq-to-SQL мертв, но в любом случае, я думаю, что это действительно просто, я просто запутался в том, что магия Linq-to-SQL делает и не делает в отношении генерируемого SQL.

Если я построил дерево выражений как «myPredicate», и у меня есть что-то вроде этого:

(from request in DataContext.RequestsTable
select request).Where(myPredicate)
               .OrderByDescending(item => item.changeDate)
               .Take(10)

это будет работать как следующий SQL:

SELECT TOP 10 * FROM RequestsTable
WHERE (<<myPredicate equivalent>>) 
ORDER BY ChangeDate DESC 

Мне это просто кажется странным, потому что ".Where ()" идет после "select" в моем примере кода. Влияет ли относительное расположение «select» и «where ()» и «orderby ()» на вещи?

В качестве альтернативы, я могу сделать все это в синтаксисе sql-esque? Например, есть ли способ использовать мой предикат WHERE в альтернативном синтаксисе, что-то вроде этого?

(from request in DataContext.RequestsTable
 where [somehow inject myPredicate]
 order by changeDate descending
 select request).Take(10)

1 Ответ

7 голосов
/ 14 апреля 2009

У вас там тот же запрос, LINQ to SQL не будет оценивать и генерировать T-SQL до тех пор, пока вы не сделаете что-то для выполнения запроса (например, .ToList (), например. не имеет значения.

Фактически, вы даже можете добавить предложения OrderBy и Where после назначения начального запроса.

например,

var query = (from x in context.RequestsTable
             select x);

query = query.AsQueryable().Where(<>);

return query.ToList(); //executes

совпадает с:

return (from x in context.RequestsTable
            where <>
            select x).ToList(); //executes

совпадает с:

return (from x in context.RequestsTable
        selext x).Where(<>).ToList();

Я не уверен, что LINQ to SQL "мертв", однако я слышал, что он может быть перенесен в ADO Entity Framework. Сгенерированный LINQ to SQL T-SQL намного превосходит Entity Framework!

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