0

私は次の構造を持っています、

イベント (PARENT) で、次のフィールドがあります。ID、イベント名

EventProcess (CHILD) には次のフィールドがあります。ID EventID(FK)、EventProcessName

EventProcessForms (GRANDCHILD) には次のフィールドがあります。ID、イベントプロセスID、フォームID

Forms- ID、FormName のフィールドがあります。

EventProcessForms テーブルに格納されているフォームを持つ EventProcess のイベントのみを返そうとしていますか?

コレクションを返すためにlinqを使用してこれを行うにはどうすればよいですか?

ご協力いただきありがとうございます

4

3 に答える 3

2

2 レベル深くする必要があるように思えます。

events.Where(
    e => e.EventProcesses.Any(
        ep => ep.EventProcessForms.Any()
        )
    );

これらのプロパティのいずれかが null になる可能性がある場合は、次のように変更します。

events.Where(
    e => e.EventProcesses != null && e.EventProcesses.Any(
        ep => ep.EventProcessForms != null && ep.EventProcessForms.Any()
        )
    );

フォームを持つプロセスのみにフィルターをかけたい場合は、を使用してイベント エンティティを変更するかforeach、フィルター処理されたプロセスを選択して新しいイベント オブジェクトを作成します。

events.Select(e=> new Event() {
         ID = e.ID, 
         Name = e.Name, 
         EventProcesses = e.EventProcesses.Where( 
             ep => ep.EventProcessForms.Any())
    .Where(e=>EventProcesses.Any())
    ;
于 2012-09-11T21:53:52.367 に答える
0

何かのようなもの:

var q = from @event in events 
    where @event.EventProcess.EventForms.Count() > 0 
    select @event;

次のように表すこともできます。

    var q = from @event in events
            where @event.EventProcess.EventForms.Any()
            select @event;

プロパティの基となる実際のクラスがないと推測しています...

于 2012-09-11T21:47:34.813 に答える
0

私は自分の答えを編集しました:

using (yourDataContext db = new yourDataContext());
{    
    var results = db.Event.Where(e -> e.EventProcess.EventProcessForms.count() > 0);
}
于 2012-09-11T21:45:34.110 に答える