У меня есть следующий код C#, создающий запрос на sqlserver.Заказ отсутствующий в запросе рамки сущности
return c.Bags
.Where(b => b.RollformerId == RollformerId
&& (!b.Order.OnHold.HasValue || b.Order.OnHold.Value == false)
&& (!b.Order.Archive.HasValue || b.Order.Archive.Value == false)
&& (!b.Order.Inactive.HasValue || b.Order.Inactive.Value == false)
&& (b.BagStatus.BagStatusId == notStarted
|| b.BagStatus.BagStatusId == inProgress))
.OrderBy(b => b.Priority)
.ThenBy(b => b.ScheduleDate)
.SelectMany(b => b.Packs
.OrderBy(p => p.PackSequence))
.FirstOrDefault();
Он генерирует следующий SQL код:
SELECT
[Limit1].[BatchID] AS [BatchID],
[Limit1].[RollformerID] AS [RollformerID],
[Limit1].[Description] AS [Description],
[Limit1].[OrderID] AS [OrderID],
[Limit1].[BagId] AS [BagId],
[Limit1].[PackSequence] AS [PackSequence],
[Limit1].[PackStatusId] AS [PackStatusId],
[Limit1].[Priority] AS [Priority],
[Limit1].[ProductID] AS [ProductID],
[Limit1].[DeliveryID] AS [DeliveryID]
FROM (SELECT TOP (1)
[Extent4].[BatchID] AS [BatchID],
[Extent4].[DeliveryID] AS [DeliveryID],
[Extent4].[Priority] AS [Priority],
[Extent4].[ProductID] AS [ProductID],
[Extent4].[RollformerID] AS [RollformerID],
[Extent4].[Description] AS [Description],
[Extent4].[OrderID] AS [OrderID],
[Extent4].[BagId] AS [BagId],
[Extent4].[PackSequence] AS [PackSequence],
[Extent4].[PackStatusId] AS [PackStatusId]
FROM [dbo].[Bag] AS [Extent1]
INNER JOIN [dbo].[Orders] AS [Extent2] ON [Extent1].[OrderId] = [Extent2].[OrderID]
LEFT OUTER JOIN [dbo].[Orders] AS [Extent3] ON [Extent1].[OrderId] = [Extent3].[OrderID]
INNER JOIN [dbo].[Batches] AS [Extent4] ON [Extent1].[BagId] = [Extent4].[BagId]
WHERE ([Extent2].[OnHold] IS NULL OR [Extent3].[OnHold] = 0)
AND ([Extent3].[Archive] = 0 OR [Extent3].[Archive] IS NULL)
AND ([Extent3].[Inactive] = 0 OR [Extent3].[Inactive] IS NULL)
AND ([Extent1].[RollformerId] = @p__linq__0)
AND ([Extent1].[BagStatusId] IN (@p__linq__1,@p__linq__2))
) AS [Limit1]
Сопоставляя выход к оригиналу, представляется, что заказные заявления были с ompletely игнорировали в сгенерированном SQL.
Не могли бы кто-нибудь объяснить, что не так с моим заявлением, чтобы игнорировать заказ.
Решение, представленное в Ordering not working in Entity Framework query не устраивает эту ситуацию (по крайней мере, к моему удовольствию)
UPDATE:
Первый набор OrderBy находится на главной сущности, где я хочу, чтобы выбрать первую в порядке, а последующее selectmany находится в подробных записях или я хочу получить первое.
Подумайте об этом, selectmany не требуется в этом случае, так как мне нужны пакеты только от первого результата.
Я не хочу публиковать это как ответ, потому что я не знаю, так ли это, но это может помочь вам подумать о проблеме. Я думаю, что это связано с тем, что ни один из ваших заказов по частям не влияет на результат. Это похоже на то, что ORDER BY в представлении - бессмысленно, потому что вы хотите ЗАКАЗАТЬ конечным результатом. Поэтому я думаю, что вам нужно иметь свой .OrderBy после того, как вы выбрали SelectMany и FirstOrDefault, а не захоронены внутри. – LoztInSpace
@LoztInSpace Понятно, что я немного понимаю, но 'OrderBy()' после 'FirstOrDefault()' не имеет особого смысла - это странно. – jdphenix
Извините - не то, что я говорю. Do .Where.SelectMany.OrderBy.FirstOrDefault. – LoztInSpace