2016-07-09 4 views
0

私はWordとWordFormという2つのオブジェクトを持っています。それらはWordIdとリンクされています。私は私に、特定のソースIDを持つ、該当するWordFormが存在しないすべての単語を与えるLINQクエリを作成したいと思いますLINQを使用してジョインのようなクエリを作成し、子オブジェクトのプロパティをチェックするにはどうすればよいですか?

Word id  Word id Wordformid  Sourceid 

1    1  123   1 
       1  234   1 
       1  567   2 
       1  890   2 

2    2  111   1 
3    3  113   1 

4    3  222   2 

:ここではこれらのデータの例です。つまり、私を与えることができるクエリ:

ソースIDセレクタが1である場合にはソースIDセレクタは2、それは私に2 & 3

を与えるだろうされている場合、それは4

私を与えるには、ここで私がこれまで持っているものです:

var words = db.Words 
      .Where(w => !db.WordForms.Any(z => z.WordId == w.WordId)) 
      .ToList(); 


public class Word 
{ 
    public System.Guid WordId { get; set; } // WordId (Primary key) 
    public string Name { get; set; } // Name (length: 20) 
    // Reverse navigation 
    public virtual System.Collections.Generic.ICollection<WordForm> WordForms { get; set; } // WordForm.FK_WordFormWord 
} 

public class WordForm 
{ 
    public System.Guid WordFormId { get; set; } // WordFormId (Primary key) 
    public System.Guid WordId { get; set; } // WordId 
    public int   SourceId { get; set; } // Source 
    public string Definition { get; set; } // Definition (length: 500) 
    // Foreign keys 
    public virtual Word Word { get; set; } // FK_WordFormWord 
} 
+0

機能していませんか?あなたのコードは正しいようです。 –

+0

var words = db.Words .Where(w =>!db.WordForms.Any(z => z.WordId == w.WordId && w.SourceId!= z.SourceId)) .ToList(); –

+0

なぜ賛成投票。私からの投票をアップしてください。 – KyloRen

答えて

1

特定のSourceID

を有する該当WordFormがないすべての単語210

たとえば、Word wとしましょう。 WordForm対応

:特定のSourceIDを有する

db.WordForms.Where(wf => wf.WordId == w.WordId) 

がWordForm:

:特定のSourceIDを有するWordForm対応

db.WordForms.Where(wf => wf.SourceId == SourceId) 

上記のように翻訳することができます 特定のソースIDを持つ

該当WordFormない:

!db.WordForms.Where(wf => wf.WordId == w.WordId && wf.SourceId == SourceId).Any() 

または単に

!db.WordForms.Any(wf => wf.WordId == w.WordId && wf.SourceId == SourceId) 

だから、全体のクエリは次のようになります。

var words = db.Words 
    .Where(w => !db.WordForms.Any(wf => wf.WordId == w.WordId && wf.SourceId == SourceId)) 
    .ToList(); 
関連する問題