在动态linq中关注导航属性

时间:2016-07-14 14:10:43

标签: c# 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似乎并不支持selectMany。至少在包含动态linq时,选择接受字符串作为输入似乎没有任何重载。

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

2 个答案:

答案 0 :(得分:0)

确定

似乎我走在了正确的轨道上。我已经包含了不同版本的Dynamic linq,其中包括:System.Linq.Dynamic.Core

这个版本的动态linq实际上支持selectmany。选项:

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

然后工作。

答案 1 :(得分:0)

尝试

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

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

Lambdas非常实用且易于学习。编译时安全是一个优点:)

欢迎提问:)