Я столкнулся с чем-то, что озадачивает меня, и я хотел бы узнать ваше мнение по этому вопросу. Оказывается, что linq to sql и сущность каркаса угрожают последовательному порядку по-разному.
Следующий код используется только для примера, и я не утверждаю, что он вообще имеет какой-либо смысл:
Linq to sql:
DataClasses1DataContext db = new DataClasses1DataContext();
var result = (from c in db.Products
orderby c.ProductName
orderby c.UnitPrice
orderby c.UnitsOnOrder
select c).ToList();
Что он генерирует на стороне сервера:
SELECT [t0].[ProductID], [t0].[ProductName], [t0].[SupplierID], [t0].[CategoryID], [t0].[QuantityPerUnit], [t0].[UnitPrice], [t0].[UnitsInStock], [t0].[UnitsOnOrder], [t0].[ReorderLevel], [t0].[Discontinued]
FROM [dbo].[Products] AS [t0]
ORDER BY [t0].[UnitsOnOrder], [t0].[UnitPrice], [t0].[ProductName]
Тот же тест с Entity Framework генерирует это:
SELECT
[Extent1].[ProductID] AS [ProductID],
[Extent1].[ProductName] AS [ProductName],
[Extent1].[SupplierID] AS [SupplierID],
[Extent1].[CategoryID] AS [CategoryID],
[Extent1].[QuantityPerUnit] AS [QuantityPerUnit],
[Extent1].[UnitPrice] AS [UnitPrice],
[Extent1].[UnitsInStock] AS [UnitsInStock],
[Extent1].[UnitsOnOrder] AS [UnitsOnOrder],
[Extent1].[ReorderLevel] AS [ReorderLevel],
[Extent1].[Discontinued] AS [Discontinued]
FROM [dbo].[Products] AS [Extent1]
ORDER BY [Extent1].[UnitsOnOrder] ASC
Как вы можете видеть, Linq To Sql добавляет все запрошенные ордера на те, где последний имеет наивысший приоритет (что, на мой взгляд, верно).
С другой стороны, структура сущностей учитывает только последний порядок и игнорирует все остальные.
Теперь я знаю, что к тому моменту есть порядок, который можно использовать, но мне просто интересно, какое поведение является более правильным. Также, насколько я помню, расширители запросов, используемые в asp, работают с отдельным порядком, в соответствии с которым при применении к запросу, сгенерированному из другого источника данных, будет работать неправильно (в соответствии с приведенным выше примером один из порядков будет опущен)