Как получить следующий элемент в подмножестве упорядоченной таблицы, используя linq? - PullRequest
0 голосов
/ 10 апреля 2009

У меня есть две таблицы:

Topic (
  TopicID: int, (primary key)
  TopicName: varchar
);

Example (
  ExampleID: int, (primary key)
  TopicID: int, (foreign key to Topic table)
  ExampleOrder: int,
  ExampleName: varchar
);

Используя Linq, учитывая ExampleID, я хочу получить следующий пример в той же теме (с тем же TopicID). Вот как это можно сделать в sql:

DECLARE @ExampleOrder int;
DECLARE @TopicID int;
SELECT @ExampleOrder=ExampleOrder, @TopicID=TopicID FROM Example WHERE ExampleID=@ExampleID;
SELECT TOP 1 ExampleID FROM Example WHERE TopicID=@TopicID AND ExampleOrder>@ExampleOrder ORDER BY ExampleOrder

Есть ли простой способ сделать это в Linq? Я знаю, что могу сделать это с двумя запросами Linq, но я пытаюсь сделать это без дополнительных обращений к базе данных.

Ответы [ 2 ]

2 голосов
/ 11 апреля 2009
public Example GetNextExample(IEnumerable<Example> examples, Int32 exampleID)
{
   Example example = examples.Single(e => e.ExampleId == exampleID);

   return examples.
      Where(e => e.TopicID == 
         examples.Single(e => e.ExampleId == exampleID).TopicID).
      OrderBy(e => e.ExampleOrder).
      FirstOrDefault(e => e.ExampleOrder > 
         examples.Single(e => e.ExampleId == exampleID).ExampleOrder);
}
2 голосов
/ 10 апреля 2009
int exampleID = 5;
  //now to write a query
var query =
  from ex in db.Examples
  let prior = db.Examples.Where(ex2 => ex2.ExampleID == exampleID).First()
  where ex.TopicID == prior.TopicID
     && ex.ExampleOrder > prior.ExampleOrder
  order ex by ex.ExampleOrder descending
  select ex
    //ok, let's run the query - result will have 0 or 1 item in it.
List<Example> result = query.Take(1).ToList();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...