Linq-to-sql заказать по

Если вы используете React Router, я бы предложил заглянуть в библиотеку реакции-router-bootstrap, которая имеет удобный компонент LinkContainer. Этот компонент предотвращает перезагрузку страницы по умолчанию, поэтому вам не нужно иметь дело с событием.

В вашем случае это может выглядеть примерно так:

import { LinkContainer } from 'react-router-bootstrap';

<LinkContainer to={givePathHere}>
    <span className="upvotes" onClick={this.upvote}>upvote</span>
</LinkContainer>
30
задан Drew Noakes 13 December 2010 в 21:14
поделиться

3 ответа

Как я могу сделать заказ, используя указанный выше синтаксис без использования синтаксиса расширения.

Используйте запятую между полями:

orderby a, b

А что делает orderby, orderby?

Когда вы используете orderby дважды подряд, элементы концептуально сначала сортируются с использованием первого orderby , а затем снова отсортированы с использованием второго порядка orderby . Поскольку сортировка определяется как стабильная сортировка (объекты, которые связаны со вторым порядком по , останутся в том же порядке, что и после сортировки с первым порядком по это фактически означает, что это:

var query = from x in l
            orderby x.A
            orderby x.B
            select x;

эквивалентно:

var query = from x in l
            orderby x.B, x.A
            select x;

В результате термины orderby заменены местами, которые вы, вероятно, предполагали.

Тестирование с LINQ to SQL

Это можно проверить, попробовав в LINQ to SQL. Я создал следующий запрос:

var query = from a in dc.Orders
            orderby a.Date
            orderby a.CustomerID
            select a;

, и это был сгенерированный SQL:

SELECT [t0].[ID], [t0].[CustomerID], [t0].[Date], [t0].[Description]
FROM [dbo].[Order] AS [t0]
ORDER BY [t0].[CustomerID], [t0].[Date]

Обратите внимание, что заказ по a.Date не игнорируется. Оба термина включены в предложение ORDER BY, но в обратном порядке, чем вы могли предполагать.

47
ответ дан 27 November 2019 в 23:39
поделиться

Выполнение ThenBy в синтаксисе выражения запроса является простым, просто следуйте за начальным orderby через запятую и 2-е утверждение:

// Create the data source.
List<Student> students = GetStudents();

// Create the query.
IEnumerable<Student> sortedStudents =
    from student in students
    orderby student.Last ascending, student.First ascending
    select student;

Применение второго orderby с помощью стандартных операторов запроса (методы расширения) фактически применит второй orderby к результату запроса, который включает первый orderby. По сути, будет применен только второй orderby, хотя вы все равно потратите время процессора на вычисление первого orderby.

На самом деле ответ на этот вопрос содержится непосредственно в документации MSDN для методов Enumerable.OrderBy и Enumerable.ThenBy.

Поскольку IOrderedEnumerable наследуется от IEnumerable, вы можете вызвать OrderBy или OrderByDescending на результаты вызова OrderBy, OrderByDescending, ThenBy или ThenByDescending. Это вводит новое первичное упорядочивание, которое игнорирует ранее установленное упорядочивание.

8
ответ дан 27 November 2019 в 23:39
поделиться

Ответ на этот вопрос должен быть таким

orderby 1, 2

Я оставлю часть № 2 кому-нибудь другому.

0
ответ дан 27 November 2019 в 23:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: