2015-08-10 6 views
1

Я использую рамку сущности с узором из хранилища и единицей работы объектов ..Fetch историю записей с помощью LINQ

У меня есть объект запрос со свойствами «RequestID», «OldRequestId», который можно получить с помощью requestRepository объекта ,

например: requestRepostiory.GetAll(), requestRepository.GetFiltered (г => r.Requestid = 10)

  • Если я прохожу RequestID, он должен получить мне конкретную запись.
  • Если значение OldRequestId не является нулевым в полученной записи, оно также должно содержать старые данные запроса.
  • Он должен продолжаться до тех пор, пока значение OldRequestId не будет равно нулю.

enter image description here

+1

Я считаю, что вы захотите использовать рекурсивный CTE для этого. Это не поддерживается непосредственно в EF (насколько я знаю), но взгляните на это: http://stackoverflow.com/questions/11929535/writing-recursive-cte-using-entity-framework-fluent-syntax-or -inline-синтаксис –

ответ

0

Простой способ будет что-то вроде этого:

public static IEnumerable<Data> GetRecursive(int id) 
{ 
    while (true) 
    { 
     var tmp = GetFiltered(x => x.Requestid == id); 
     yield return tmp; 

     if (tmp.OldRequestId.HasValue) 
      id = tmp.OldRequestId.Value; 
     else 
      yield break; 
    } 
} 

Пожалуйста, обратите внимание, что этот код будет работать сделать несколько запросов к базе данных. Производительность не самая лучшая, но она может работать для вашего сценария.

Смежные вопросы