2014-09-10 42 views
1

我是新來的實體框架。如何在關聯表中執行linq查詢

我有3張桌子。

Candidats:身份證,CIN 郵政:身份證 PosteCandidats:candidat_id,poste_id

我想,有一個candidat(CIN = 'abc15' 和poste_id = 3)

我的模型:

public class Candidat 
    { 
    public int Id { set; get; } 
    public string num_cin { set; get; } 
    public ICollection<Poste> postes { get; set; } 
    } 

    public class Poste 
    { 
    public int Id { set; get; } 
    public string poste_name {set;get} 
    public List<Candidat> candidats {set;get;} 
    } 

生成關聯表PosteCandidats。

我想這:

我試過,但它給了我一個錯誤

  var v = _db.Candidats 
      .Where(c => c.num_cin == "abc15" 
      && c.postes.Any(pc => pc.Id == 3)); 
      var candi = v.SingleOrDefault(); 

,但它給我什麼

(我認爲這個問題是任何()方法)

+0

這個貌似工作代碼。什麼是錯誤? (不要只是說「一個錯誤」) – 2014-09-10 19:44:17

+0

你是正確的問題,我有在模型視圖,因爲我傳遞給模型的視圖,所以我沒有理解這一點 – saidmohamed11 2014-09-10 20:36:57

回答

0

2個樣品都可以工作:

var lCandidat = new List<Candidat>(); 

lCandidat.Add(new Candidat{ Id = 2, num_cin = "xabc", postes = new Collection<Poste>() 
{ 
    new Poste {Id = 10, poste_name = "id10"}, 
    new Poste {Id = 15, poste_name = "id15"} 
}}); 

lCandidat.Add(new Candidat{ Id = 1, num_cin = "abc15", postes = new Collection<Poste>() 
{ 
    new Poste {Id = 3, poste_name = "3"}, 
    new Poste {Id = 4, poste_name = "id4"} 
}}); 


//get candidat 
var v = (from c in lCandidat 
    where c.num_cin == "abc15" 
      && c.postes.Any(p => p.Id == 3) 
    select c) 
    .SingleOrDefault(); 


var v2 = lCandidat.Where(c => c.num_cin == "abc15" 
          && c.postes.Any(p => p.Id == 3)) 
         .Select(c => c).SingleOrDefault(); 



Console.WriteLine("v query ID {0}, cin {1}", v.Id, v.num_cin); 
Console.WriteLine("v2 query ID {0}, cin {1}", v2.Id, v2.num_cin); 

結果:

v query ID 1, cin abc15 
v2 query ID 1, cin abc15