0

我想通過在ViewModel中的兩個表中聯合數據來綁定下拉列表。你能否澄清一下我該怎麼做?例如,我想顯示從2和表4場在一排這樣的:使用Lambda表達式在ViewModel中連接兩個表

MeetingName MeetingCityIdA/MeetingCityIdB的名稱/名稱/MeetingDate

下面是我使用的實體:


會議:

public int MeetingID { get; set; } 
public string MeetingName { get; set; } 
public DateTime MeetingDate { get; set; } 
public int? MeetingCityIdA { get; set; } 
public int? MeetingCityIdB { get; set; } 
public int? MeetingCityIdC { get; set; } 


市:

public int CityID { get; set; } 
public string CityName { get; set; } 


視圖模型:

public class ViewModel 
{ 
    public Applicant Applicant { get; set; } 
    public IEnumerable<Applicant> Applicants { get; set; } 

    public IEnumerable<Meeting> Meetings { get; set; } 
    public IEnumerable<City> Cities { get; set; } 
} 


型號:

+0

你應該告訴我們你的EF映射 –

+0

@Kirill Bestemyanov:對不起,我更新的問題。 –

回答

0

更新和@Kirill Bestemyanov的工作答:

var list = repository.Meetings 
    .GroupJoin(repository.Cities, m => m.MeetingCityIdA, c => c.CityID, (m, c) => new {m, cA = c.DefaultIfEmpty()}) 
    .SelectMany(z => z.cA.Select(cA => new { m = z.m, cA })) 
    .GroupJoin(repository.Cities, m => m.m.MeetingCityIdB, c => c.CityID, (m, c) => new {m.m, m.cA, cB = c.DefaultIfEmpty()}) 
    .SelectMany(w => w.cB.Select(cB => new { m = w.m, cA= w.cA, cB })) 
    .GroupJoin(repository.Cities, m => m.m.MeetingCityIdC, c => c.CityID, (m, c) => new {m.m, m.cA, m.cB, cC = c.DefaultIfEmpty()}) 
    .SelectMany(t => t.cC.Select(cC => new { m = t.m, cA= t.cA, cB = t.cB, cC })) 
    .Select(
     m => 
      new 
      { 
       m.m.MeetingName, 
       NameofMeetingCityIdA = m.cA!=null?m.cA.CityName:null, 
       NameofMeetingCityIdB = m.cB!=null?m.cB.CityName:null, 
       NameofMeetingCityIdC = m.cC!=null?m.cC.CityName:null, 
       m.m.MeetingDate 
      }); 
1

您可以使用未來的LINQ查詢:

var list = Meetings.GroupJoin(Cities, m => m.MeetingCityIdA, c => c.CityID, (m, c) => new {m, cA = c.DefaultIfEmpty()}) 
       .SelectMany(z => z.cA.Select(cA => new { m = z.m, cA }) 
       .GroupJoin(Cities, m => m.m.MeetingCityIdB, c => c.CityID, (m, c) => new {m.m, m.cA, cB = c.DefaultIfEmpty()}) 
       .SelectMany(z => z.cB.Select(cB => new { m = z.m, cA= z.cA, cB }) 
       .GroupJoin(Cities, m => m.m.MeetingCityIdC, c => c.CityID, (m, c) => new {m.m, m.cA, m.cB, cC = c.DefaultIfEmpty()}) 
       .SelectMany(z => z.cC.Select(cC => new { m = z.m, cA= z.cA, cB = z.cB, cC }) 
       .Select(
        m => 
         new 
         { 
          m.m.MeetingName, 
          NameofMeetingCityIdA = m.cA!=null?m.cA.CityName:null, 
          NameofMeetingCityIdB = m.cB!=null?m.cB.CityName:null, 
          NameofMeetingCityIdC = m.cC!=null?m.cC.CityName:null, 
          m.m.MeetingDate 
         }); 

它加入與MeetingCityIdA城市會議,然後加入導致對MeetingCityIdB城市,然後選擇你想要什麼。

但是,如果您將使用實體的導航屬性而不是使用linq的Join語句,那將是正確的。

+0

感謝您的回覆。你是說爲了填充Dropdownlist,我們應該使用類似於該頁面的方式? http://odetocode.com/blogs/scott/archive/2013/03/11/dropdownlistfor-with-asp-net-mvc.aspx 如果是這樣,我想我不能在同一個Dropdownlist行顯示三個城市。我錯了嗎? –

+0

我不知道你想要什麼。在我的最後一條評論中,我的意思是你可以設置你的會議,在沒有明確加入linq查詢的情況下,開箱即可獲得導航特性到MeetingCityA,MeetingCityB和MeetingCityC。 –

+0

好的,謝謝你的回覆。實際上,由於某些特殊問題(設置Dropdownlist屬性等),我必須使用此方法。您的代碼適用於MeetingCityIdA和MeetingCityIdB。但是,我無法添加諸如MeetingCityIdC之類的其他會議。你能否爲3城市更新它? BR。 –