【问题标题】:Follow navigation property in dynamic linq遵循动态 linq 中的导航属性
【发布时间】:2016-07-14 14:10:42
【问题描述】:

我正在尝试使用动态 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)");

但这不起作用。

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

我发现了一个例子:

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

但是,动态 linq 似乎不支持 selectMany。至少当包含动态 linq 时,selectman 接受字符串作为输入似乎没有任何过载。

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

【问题讨论】:

    标签: c# dynamic-linq


    【解决方案1】:

    好的

    看来我是在正确的轨道上。我包含了不同版本的 Dynamic linq,即:System.Linq.Dynamic.Core

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

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

    然后工作。

    【讨论】:

      【解决方案2】:

      试试

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

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

      欢迎提问:)

      【讨论】:

      • 使用动态 linq 的重点是我不知道属性名称是什么 :) 所以使用 lambdas 不是一种选择
      猜你喜欢
      • 2016-11-13
      • 1970-01-01
      • 1970-01-01
      • 2017-10-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-14
      相关资源
      最近更新 更多