将IEnumerable <selectlistitem>返回到MVC控制器</selectlistitem>时出错

时间:2013-02-26 09:11:44

标签: asp.net-mvc linq ienumerable

您好我有一个业务逻辑层,它将selectlistitems返回给控制器,然后传递给视图以填充选择列表。

我有这个方法有效:

 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()
             });
        }
      }

明显的区别是两个表之间的连接,我收到的错误是:

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

在尝试扩展调试结果时收到了这一点。任何建议都会受到欢迎,因为我对LINQ不太熟悉

1 个答案:

答案 0 :(得分: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后再添加{{1}}。我也不需要创建新的匿名类型 - 感谢上面的joanna。

这是答案,但不是一个很好的解释,如果有人想要填写一点,请随意!