2013-02-26 77 views
2

嗨我有一個業務邏輯層,它將selectlistitems返回給控制器,然後將傳遞給視圖以填充選擇列表。將IEnumerable <SelectListItem>返回給MVC控制器時出錯

我有這種方法的工作原理:

public IEnumerable<SelectListItem> GetDevices 
    { 
     get 
     { 
     using (IDeviceData repository = _dataFactory.Create()) 
     { 
      return repository.DeviceTypes.ToList() 
      .Where(dt => dt.ParentId == 10) 
      .Select(dt => 
      new SelectListItem 
      { 
       Text = (dt.Name).Trim(), 
       Value = dt.Id.ToString() 
      }); 
     } 
     } 
    } 

這一點不:

public IEnumerable<SelectListItem> GetGroups(int deviceTypeId) 
    { 
     using (IDeviceData repository = _dataFactory.Create()) 
     { 
      return repository.DeviceTypeConfigurationParameterGroupMaps.ToList() 
      .Where(cm => cm.DeviceTypeId == deviceTypeId) 
      .Join(repository.ConfigurationParameterGroups, cm => cm.ConfigurationParameterGroupId, cg => cg.Id, (cm, cg) => new { cm, cg }) 
      .Select(cg => 
      new SelectListItem 
      { 
       Text = (cg.cg.Name).Trim(), 
       Value = cg.cg.Id.ToString() 
      }); 
     } 
     } 

最明顯的區別是兩個表之間的連接,我receieve錯誤是:

Results View = The type '<>f__AnonymousType0<p,d>' exists in both 'System.Web.dll' and 'EntityFramework.dll' 

當試圖擴展調試結果時,會接收到此消息。任何意見將EB歡迎因爲我不是太熟悉LINQ

+1

從您發佈的內容看來,這兩個DLL似乎都包含一個類型的定義,該類型與創建爲'new {cm,cg}'的匿名類型相匹配。我想,如果你創建了一個助手類(或者使用了一個已經存在的類型)而不是使用匿名類,它可能會工作 – 2013-02-26 10:03:05

+0

謝謝喬安娜,這是問題的一部分。請參閱下面的答案。 – DavidB 2013-02-26 10:41:54

回答

1

想通了:

public IEnumerable<SelectListItem> GetGroupsForDevice(int deviceTypeId) 
    { 
     using (IDeviceData repository = _dataFactory.Create()) 
     { 
      return repository.DeviceTypeConfigurationParameterGroupMaps 
      .Where(cm => cm.DeviceTypeId == deviceTypeId) 
      .Join(repository.ConfigurationParameterGroups, cm => cm.ConfigurationParameterGroupId, cg => cg.Id, (cm, cg) => cg) 
      .ToList() 
      .Select(cg => 
      new SelectListItem 
      { 
       Text = (cg.Name).Trim(), 
       Value = cg.Id.ToString() 
      }).ToList() ; 

     } 
     } 

我需要在連接後添加ToList(),並轉換爲SelectlistItem後被再次。我也不需要創建新的匿名類型 - 感謝上面的喬安娜。

這是答案,但不是一個很好的解釋,如果任何人想填補一點,請隨時免費!