У меня есть следующая таблица
ItemNumber | FirstId | SecondId | ClientId
1 | 14 | 16 | NULL
2 | 17 | 18 | 1233242323
3 | 14 | 18 | 1233242323
5 | 15 | 12 | NULL
6 | 14 | 8 | 324234252
7 | 19 | 14 | 324234252
8 | 18 | 19 | 324234252
9 | 20 | 18 | 324234252
Со следующим классом
public class ClientObject
{
public int ItemNumber { get; set; }
public int FirstId { get; set; }
public int SecondId { get; set; }
public double ClientId { get; set; }
public ClientObject()
{
}
}
Учитывая FirstId и ClientId, я хочу вернуть SecondId, если в столбце FirstId не найдено совпадений. Например: начиная с FirstId как 20 ItemNumber 9), я хотел бы вернуть 8 (ItemNumber 6).
Я пытаюсь использовать рекурсивный функциональный подход, но не уверен, правильно ли он или есть ли лучший способ решить эту проблему.
public ClientObject GetItemRecursive(int initialId, double client)
{
var returnThis = databaseCtxt.TableToUse
.Where(x => x.FirstId == initialId && x.ClientId == client)
.AsEnumerable() // updated from suggestion
.Select(x => GetItemRecursive(x.SecondId, x.ClientId))
.FirstOrDefault();
return returnThis ;
}
Я попытался настроить это локально, но не смогли, так как это очень-очень маленькая часть большого проекта, поэтому я создал здесь самые маленькие примеры.