我尝试使用动态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"是动态的,可以通过字符串输入确定
答案 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非常实用且易于学习。编译时安全是一个优点:)
欢迎提问:)