遵循动态 linq 中的导航属性
本文关键字:导航 属性 linq 动态 | 更新日期: 2023-09-27 17:57:07
我正在尝试使用动态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 子句中使用它们,但不能在选择中使用它们。
我发现了一个有人做的例子:
c.Users.SelectMany("Documents").Select("new (DocumentID)");
但是,动态 linq 似乎不支持 selectMany。至少在包含动态 linq 时,似乎没有任何重载来选择接受字符串作为输入。
有没有人能把我推向正确的方向?我也欢迎关于如何在没有动态linq的情况下进行选择的建议,只要"文档"部分和选择列表(在这种情况下,"DocumentID"是动态的,可以通过字符串输入确定)
好的
看来我走在正确的轨道上。我包含了Dynamic linq的不同版本,即:System.Linq.Dynamic.Core
这个版本的动态 linq 实际上支持选择许多。选项:
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 非常有用且易于学习。编译时安全性是一个加分项:)
欢迎提问:)