Как я могу написать запрос в Subsonic для подзапросов

StackOverflow https://stackoverflow.com/questions/843078

  •  20-08-2019
  •  | 
  •  

Вопрос

Как я могу выполнить следующий запрос в subsonic 2.2

select Table1.Id, Table1.Name, Table1.Age from Table1
where Table1.Id =
(
select Max(T.Id) from Table1 T
Where T.Age = 20
)

Можетли кто-нибудь привести мне пример.

Спасибо.nRk

Это было полезно?

Решение

Subsonic 2.2 может выполнять подзапросы:

Как предложил Адам, отредактированный и улучшенный пример использования В, это работает для меня:

SubSonic.Select s = new SubSonic.Select(SSDAL.Customer.CustomerIDColumn, SSDAL.Customer.NameColumn);
SubSonic.Aggregate a = new SubSonic.Aggregate(SSDAL.Customer.CustomerIDColumn, SubSonic.AggregateFunction.Max);
SSDAL.CustomerCollection COL = new SSDAL.CustomerCollection();
SubSonic.Select sq = new SubSonic.Select("LastCustomerId");
sq.Aggregates.Add(a);
sq.From(Tables.Customer);
a.Alias = "LastCustomerId";
s.From(Tables.Customer);
s.Where(SSDAL.Customer.CustomerIDColumn).In(sq);
COL = s.ExecuteAsCollection<SSDAL.CustomerCollection>();
;

Этот код выдает следующий SQL:

SELECT [dbo].[Customer].[CustomerID], [dbo].[Customer].[Name]
 FROM [dbo].[Customer]
 WHERE [dbo].[Customer].[CustomerID] IN (SELECT MAX([dbo].[Customer].[CustomerID]) AS 'LastCustomerId'
 FROM [dbo].[Customer])

Другие советы

Возможно, Адам что-то заподозрил, но это выглядит немного некрасиво.Вот пример, который немного более удобочитаем и который возвращает IDataReader

new SubSonic.Select(Table1.IdColumn,Table1.NameColumn,Table1.AgeColumn)
.From(Table1.Schema)
.Where(Table1.IdColumn).In(new SubSonic.Select(Aggregate.Max(Table1.IdColumn)).From(Table1.Schema))
.ExecuteReader();

Насколько я знаю, в SubSonic нет поддержки подзапросов.Вам нужно будет поместить запрос в sproc и использовать сгенерированный метод SPs.SprocName().

Редактировать:Я был неправ, смотрите другой ответ ниже.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top