在动态 linq 中关注导航 属性

Follow navigation property in dynamic linq

我正在尝试使用动态 linq 来查询数据。现在我有一个(正常的)linq 查询,如:

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

我正在寻找动态 linq 中的等效项。重点在于如何从用户实体导航到文档实体。我可以这样做:

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

但是我当然做不到:

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

我想我也许可以做类似的事情:

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

但这行不通。

我发现了大量在 where 子句中使用导航属性的示例。我已经能够在 where 子句中使用它们,但不能在 select.

中使用

我发现了一个例子:

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

然而,动态 linq 似乎不支持 select许多。至少,select许多人在包含动态 linq 时接受字符串作为输入似乎没有任何过载。

有没有人可以把我推向正确的方向?我也欢迎关于如何在没有动态 linq 的情况下执行 selectmany 的建议,只要 "Documents" 部分和 select 列表(在本例中 "DocumentID" 是动态的,可以通过字符串输入确定

好的

看来我走对了。我包含了不同版本的 Dynamic linq,即:System.Linq.Dynamic.Core

这个版本的dynamic linq其实是支持selectmany的。选项:

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

然后工作。

尝试

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

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

Lambda 非常有用且易于学习。编译时安全是一个加号:)

欢迎提问:)