Конвертировать оператор SQL в Linq - PullRequest
1 голос
/ 22 июля 2009

Как я могу преобразовать следующий оператор SQL в оператор LinqToSQL?

select field, 1 as ordering from table where field2 = condition1
union all
select field, 7 as ordering from table where field2 = condition2
union all
select field, 3 as ordering from table where field2 = condition3
union all
select field, 2 as ordering from table where field2 = condition4
order by ordering

По сути, я просто присоединяюсь к паре запросов и упорядочиваю результирующий набор на основе происхождения строки.

Я могу управлять объединением, как показано ниже, но я не могу заставить LinqToSQL упорядочить весь набор результатов, я могу получить его только для упорядочения каждого отдельного запроса.

from t in table
where
condition
select new { field, ordering = 1 }
).Union
(
from t2 in table2
where
condition
select new { field ordering = 7 }
).Union
(
from t3 in table3
where
condition
select new { field ordering = 3 }
).Union
(
from t4 in table4
where
condition
select new { field ordering = 2 }
);

Ответы [ 2 ]

0 голосов
/ 22 июля 2009

две мысли; с UNION ALL, .Concat(...) более подходит, чем .Union(...).

Во-вторых, при необходимости вы можете сделать заказ отдельно в LINQ-to-Objects:

var origQry = ...

var qry = origQry.AsEnumerable().OrderBy(x => x.ordering);

Это будет выполнять упорядочение в памяти.

0 голосов
/ 22 июля 2009

LINQ to SQL поможет вам получить столько данных на проводе, сколько необходимо, поэтому переупорядочение их в памяти с дополнительным оператором не должно быть падением производительности. Конечно, на этот раз это будет LINQ to Objects.

Вы также пытались звонить OrderBy() или OrderByDescending() после вашего последнего Союза?

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