Entity Framework Query - получение объектов в определенном порядке

У меня есть список, в котором указаны идентификаторы ряда объектов в моей базе данных. Я хочу получить набор объектов, все из одной таблицы, которые имеют эти идентификаторы, и сохранить их в этом точном порядке, и я хочу, чтобы он выполнялся как один запрос к БД (а не 'N').

Например, у меня есть список идентификаторов {5, 3, 6, 9}, и я хочу получить список объектов Customer с этими идентификаторами и сохранить их в порядке {Customer (5, 'Bob') , Клиент (3, «JimBo»), Клиент (6, «Джо»), Клиент (9, «Джек»)}.

Объем данных достаточно мал, поэтому я не против пересортировать их после запроса БД. Я мог бы сделать все это примерно за 15 строк чистого кода (включая повторную сортировку вручную), но я чувствую, что должен быть одно- или двухстрочный запрос LINQ к EF, который должен делать это легко.

7 голосов | спросил pbarranis 4 Maypm11 2011, 18:12:01

2 ответа


0

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

ответил Chris Snowden 4 Maypm11 2011, 18:20:53
0
void Main()
{
    List<Data> data = new List<Data>();
    data.Add(new Data{Id =1, Name = "ABC1"});
    data.Add(new Data{Id =2, Name = "ABC2"});
    data.Add(new Data{Id =3, Name = "ABC3"});
    data.Add(new Data{Id =4, Name = "ABC4"});
    data.Add(new Data{Id =5, Name = "ABC5"});

    var result = from d in data
                let ids = new List<int>{3,4,5}
                where ids.Any(i=> i == d.Id)
                select d;
    result.Dump();              
}

// Define other methods and classes here
class Data
{
    public int Id{get;set;}
    public string Name{get;set;}
}

Идентификаторы могут быть еще одним запросом, чтобы получить идентификаторы откуда-то еще, но заказывайте их как хотите. Обратите внимание, что это код Linqpad, следовательно, метод .Dump ().

ответил AD.Net 4 Maypm11 2011, 18:24:34

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

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132