2016-07-14 3 views
0

Я пытаюсь использовать динамический linq для запроса данных. Теперь у меня есть (нормальный) запрос linq:Следуйте за навигационным свойством в динамическом linq

from u in c.Users 
from d in u.Documents 
select d.DocumentID 

Я ищу эквивалент этого в динамическом linq. Акцент делается на том, как перемещаться из объекта User в объект Document. Я могу сделать что-то вроде:

c.Users.Select("new (UserName)"); 

Но, конечно, я не могу сделать:

c.Users.Select("new (Documents.DocumentID AS DocumentID)"); 

Я думал, что я мог бы быть в состоянии сделать что-то вроде:

var q = c.Users.Select("Documents"); 
q.Select("new (DocumentID)"); 

Но это не Работа.

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

Я нашел один пример: кто-то делает

c.Users.SelectMany("Documents").Select("new (DocumentID)"); 

Однако динамический LINQ, кажется, не имеет поддержки SelectMany. По крайней мере, кажется, нет никакой перегрузки для selectmany принятия строки в качестве входных данных, когда включен динамический linq.

Есть ли кто-нибудь, кто может подтолкнуть меня в правильном направлении? Я также приветствовал бы предложения о том, как делать selectmany без динамического linq, если только часть «Документы» и список выбора (в этом случае «DocumentID» является динамическим и может быть определен строковым вводом

ответ

0

. Ok

кажется, что я на правильном пути, я включил другую версию Dynamic LINQ, будучи: System.Linq.Dynamic.Core

Эта версия динамического LINQ действительно имеет поддержку SelectMany в Опция:

c.Users.SelectMany("Documents").Select("new (DocumentID)"); 

затем работает.

0

Попробуйте

var ids = Users.SelectMany(usr => usr.Documents.Select(i=>i.DocumentId)); 

var docs = Users.SelectMany(usr => usr.Documents); 

Лямбда действительно полезно и легко научиться. Время компиляции безопасность является плюсом :)

Вопросы приветствуются :)

+0

Весь смысл использования динамического LINQ, что я не знаю, что имена свойств :) так, используя лямбды не является вариант – PaulVrugt

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