я таблица следующего автореферентногоиспользования String.split в сущности, чтобы пересечь глубину дерева
public partial class products_category
{
public long id { get; set; }
public string category_name { get; set; }
public string category_description { get; set; }
//self referencing to table id
public Nullable<long> Parent_Id { get; set; }
public string navPath {get; set; }
}
здесь строка navpath содержит все ведущие родитель для ребенка categroy, говорят:
"Clothes" = 1 Parent_id=null, navpath=""
"Silk" = 2 Parent_id=1 navpath="1"
"Silk Suit"=3 parent_id=2 navpath="1-2"
"Saree" =4 parent_id=3 navpath="1-2-3"
"Dress Material"=5 parent_id=1 navpath="1" and so on....
теперь в соответствии с этим сценарием я хочу получить доступ к дереву flattend для обработки на определенной глубине только для уровня 2 или до уровня 4 глубина детей, связанных с навигацией.
моя идея по этому вопросу должен был подойти с помощью LINQ Е.Ф. таким образом:
var catTrees = db.products_category.Where(pc => pc.navpath.Split('-').Length < 4).ToList();
Я использую следующую ссылку, чтобы сделать дальнейшие перемещения и генерации дерева: https://bitlush.com/blog/recursive-hierarchical-joins-in-c-sharp-and-linq
и делает большая работа до сих пор, единственная проблема: я не хочу, чтобы предварительно выбрать целую таблицу для обработки. Я хочу достичь пейджинга и определенного уровня глубины для первой итерации, поэтому я могу поддерживать производительность в случае тысяч записей. [подумайте об этом как иерархии категорий или иерархии комментариев блога/youtube].
, но с помощью команды выше эф LinQ дает следующее сообщение об ошибке:
The LINQ expression node type 'ArrayLength' is not supported in LINQ to Entities.
я проверил с эф документы и в других местах в SO, чтобы знать, что String.split не работает с EF неявно. но можем ли мы применить его с помощью методов расширения или может ли этот выбор дерева иметь альтернативный подход, не используя string.split и удаляя только DB? пожалуйста совет.
проверяя ваше предложение – Alok
не повезло DbExpressionBinding не требует ввода выражения с коллекцией ResultType. – Alok
ОК, стоило сделать снимок. но вот решение, которое всегда работает. –