2016-07-14 2 views
0

私は動的linqを使用してデータを照会しようとしています。今私は(普通の)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が含まれている場合は、文字列を入力として受け入れるselectmanyへのオーバーロードはありません。

正しい方向に私を押し込むことができる人はいますか?私はまた、 "ドキュメント"部分と選択リスト(この場合 "DocumentID"は動的であり、文字列入力によって決定できる)である限り、ダイナミックlinqを使わずにselectmanyを行う方法についての提案を歓迎するでしょう。

答えて

0

[OK]を

私が動的LINQ、ビーイングの異なるバージョンを用意しました、私は正しい軌道に乗っていたようです:System.Linq.Dynamic.Core

をダイナミックLINQのこのバージョンは、実際にselectmanyをサポートしています。そのオプション:

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

が動作します。

0

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

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

ラムダを試してみて、本当に役に立つと学ぶことは簡単です。コンパイル時の安全性はプラスです:)ご質問は大歓迎:)

+0

ある

ダイナミックLINQを使用しての全体のポイントは、私はプロパティ名が:) あるかわからないということですので、ラムダを使用することではありませんオプション – PaulVrugt

関連する問題