Как я могу заказать результат linq, используя массив? - PullRequest
2 голосов
/ 04 ноября 2011

У меня есть массив идентификаторов, по порядку, используя эти идентификаторы, я затем выдаю запрос linq, однако я хочу, чтобы результаты запроса linq возвращались в том же порядке, в котором находятся идентификаторы в массиве.

Пример:

int[] ids = new [] {10, 9, 8, 7};

var query = from row in context.Table where ids.Contains(row.Id) select row;

Как я могу убедиться, что полученные элементы находятся в том же порядке, что и в массиве?

Ответы [ 3 ]

5 голосов
/ 04 ноября 2011

Вы можете упорядочить строки по index их Id in ids:

var query = from row in context.Table
            where ids.Contains(row.Id)
            orderby Array.IndexOf(ids, row.Id)
            select row;

Я не уверен, поддерживает ли поставщик LINQ-to-SQL это; вам может потребоваться выполнить упорядочение с помощью LINQ-to-Objects:

var query = from row in context.Table
            where ids.Contains(row.Id)
            select row;

var orderedQuery = from row in query.AsEnumerable()
                   orderby Array.IndexOf(ids, row.Id)
                   select row;

или

var orderedQuery = context.Table
                          .Where(row => ids.Contains(row.Id))
                          .AsEnumerable()
                          .OrderBy(row => Array.IndexOf(ids, row.Id));
0 голосов
/ 04 ноября 2011

Вы можете перечислить по идентификаторам, а затем искать соответствующие записи в таблице:

// if table contains multiple rows per id
var resultSet = ids.SelectMany(id => context.Table.Where(tbl => tbl == id));

// if table contains one row per id
var resultSet = ids.Select(id => context.Table.Where(tbl => tbl == id).Single());
0 голосов
/ 04 ноября 2011
...