Как расширить в Lightswitch запрос, который возвращает только листовые узлы дерева? - PullRequest
0 голосов
/ 18 августа 2011

В Microsoft Lightswitch у меня есть собственная таблица ссылок:

Courses {CourseID int, ParentID int, CourseName string}

На экране LightSwitch у меня есть раскрывающийся список, в котором должны отображаться только конечные курсы.

Я создал запрос LeafCourses и пытаюсь расширить его, чтобы он возвращал только листовые узлы, что-то вроде оператора SQL:

SELECT * FROM Courses WHERE CourseId NOT IN  
(    
SELECT ParentID FROM Courses WHERE ParentID is NOT NULL     
)

Это то, что у меня есть (не работает):

    partial void LeafCourses_PreprocessQuery(string Parameter, ref IQueryable<Cours> query)  
    {  
        query = from Cours c1 in query  
                where  
                !(from Cours c2 in this.Courses  
                  select c2.Cours1.CourseId  
                  ).Contains(c1.CourseId)  
                select c1;  
    }  

1 Ответ

0 голосов
/ 22 ноября 2011

Ваше сообщение давно и у вас уже есть решение, но все же:

Насколько я понимаю вашу модель данных, внутреннего выбора будет достаточно:

SELECT * FROM courses WHERE parentid IS NOT NULL

Это дает вам все строки, у которых есть родительская строка (которые будут вашими конечными узлами).

Использование LINQ в LightSwitch PreprocessQuery () это будет что-то вроде:

query = query.Where<Cours>(c => c.ParentId != null);

или не использовать лямбду:

query = from c in query where c.ParentId != null select c;

Это работает, даже если у вас нет ".ChildCourses", чего у вас явно нет.

...