Добрый день!
Подскажите, как средствами серверной ESQ реализовать такой запрос
select o.Number from [Order] o where not exists( select null from OrderProduct op where op.OrderId = o.Id and op.TypeId = '29468170-1C73-4851-967B-90E5C108AEF9' --some type )
Не получается задать связь op.OrderId = o.Id в подзапросе.
Нравится
6 комментариев
Лучший ответ
20 марта 2019 17:35
Максим.Паламарчук,
Попробуйте такой вариант
var esq = new EntitySchemaQuery(_userConnection.EntitySchemaManager, "Order"); esq.AddAllSchemaColumns(); var filtersByExisting = new EntitySchemaQueryFilterCollection(esq); filtersByExisting.IsNot = true; var notExFilter = esq.CreateFilterWithParameters( FilterComparisonType.IsNotNull, "[OrderProduct:Order].Id"); filtersByExisting.Add(notExFilter); filtersByExisting.Add(esq.CreateFilterWithParameters(FilterComparisonType.Equal, "[OrderProduct:Order].Type.Id", new Guid("29468170-1C73-4851-967B-90E5C108AEF9"))); esq.Filters.Add(filtersByExisting); var entityCollection = esq.GetEntityCollection(_userConnection);
20 марта 2019 16:59
Через Select:
var select = new Select(_userConnection) .Column("o", "Number") .From("Order").As("o") .Where() .Not().Exists( new Select(_userConnection).Column("op", "Id").From("OrderProduct").As("op").Where("op", "OrderId ").IsEqual("o", "Id") .And("op", "TypeId").IsEqual(Column.Parameter("29468170-1C73-4851-967B-90E5C108AEF9")) );
Через ESQ:
var esq = new EntitySchemaQuery(_userConnection.EntitySchemaManager, "Order"); esq.AddAllSchemaColumns(); esq.Filters.Add(esq.CreateFilterWithParameters(FilterComparisonType.Equal, "Type", new Guid("29468170-1C73-4851-967B-90E5C108AEF9"))); esq.Filters.Add(esq.CreateFilterWithParameters(FilterComparisonType.NotExists, "[OrderProduct:Order:Id].Id")); var entityCollection = esq.GetEntityCollection(_userConnection);
20 марта 2019 17:15
Сидоров Александр В.,
насчет Select я согласен, а вот в esq, мне кажется, что колонка Type относится к схеме Order, а не OrderProduct, или я не прав?
20 марта 2019 17:22
Максим.Паламарчук,
Да, согласен. Нужно Type внести во внутренний запрос
20 марта 2019 17:24
Сидоров Александр В.,
А каким образом это реализовать?
20 марта 2019 17:35
Максим.Паламарчук,
Попробуйте такой вариант
var esq = new EntitySchemaQuery(_userConnection.EntitySchemaManager, "Order"); esq.AddAllSchemaColumns(); var filtersByExisting = new EntitySchemaQueryFilterCollection(esq); filtersByExisting.IsNot = true; var notExFilter = esq.CreateFilterWithParameters( FilterComparisonType.IsNotNull, "[OrderProduct:Order].Id"); filtersByExisting.Add(notExFilter); filtersByExisting.Add(esq.CreateFilterWithParameters(FilterComparisonType.Equal, "[OrderProduct:Order].Type.Id", new Guid("29468170-1C73-4851-967B-90E5C108AEF9"))); esq.Filters.Add(filtersByExisting); var entityCollection = esq.GetEntityCollection(_userConnection);
20 марта 2019 17:49
Сидоров Александр В.,
спасибо, все работает. Свойство IsNot как раз то, что нужно
Показать все комментарии
Войдите или зарегистрируйтесь, что бы комментировать